关于java反射机制(基础篇)
關于java的反射機制,有一些初步的理解,但是依然存在幾點困惑。先將自己理解的部分分享其下,并提出困惑,之后完善。
1、 java反射機制是什么?
?
從兩個概念切入:反射機制和java反射機制
①反射機制:主要是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。
②JAVA反射機制:是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
(概念摘自百度詞條。對于程序小白來說是不是覺得一頭霧水,似懂非懂?)
#對反射的理解:萬事萬物都有其外在的具體表現,而外在的表現源于內在的特性和能進行的活動。反射就類似于透過外在看本質的過程,通過外在的表現折射(反射機制)出其內在的特性等。
#對反射機制的理解:對于面向對象的編程語言來說,萬事萬物都是對象,每個對象都會有不同的職能(外在表現),而能具有不同的職能是由對象本身具有的特性(屬性)和行為(方法)決定的;而對這些屬性和方法進行探知(訪問、檢測、修改)的能力就是反射機制。
#對java反射機制的理解:java程序語言具有對對象進行反射的能力,我們將這種能力稱為反射機制,而其具體表現為:在程序運行狀態中(動態),對任意的類(對象),都能夠知道這個類(對象)所有的屬性和方法,也同時能調用其任意的屬性和方法,java語音所提供的這個功能我們稱之為java語言的反射機制。
?
2、java反射機制有什么具體的使用?
?
#動態加載:動態加載是與靜態加載相對的概念;“靜態加載”的類在程序編譯的時候就要提供,而動態加載的類在源程序編譯時可以缺席(程序運行時才進行加載)。也就是說編譯時刻加載的類是靜態加載類、運行時刻加載的類是動態加載。使用動態加載,實現了功能模塊的無限擴展和程序的自由度。通常程序在運行之前需要編譯程序所包含的所有類,而設置為動態加載的類則跳過了程序的編譯階段,在真正使用到它的時候才進行加載。
這樣做的好處是:假如我們有兩個程序員,一個程序員在寫程序的時候,需要使用第二個程序員所寫的類,但第二個程序員并沒完成他所寫的類。那么第一個程序員的代碼能否通過編譯呢?這是不能通過編譯的。利用Java反射的機制,就可以讓第一個程序員在沒有得到第二個程序員所寫的類的時候,來完成自身代碼的編譯。其次在一些軟件的自動升級,等功能上都會使用動態加載類的方法。
#獲得類的信息:它允許運行中的 Java 程序對自身進行檢查,或者說“自審”,并能直接操作程序的內部屬性和方法。
?
3、如何使用java反射機制
?
在了解java反射機制的使用方法之前,我們先需要知道幾個概念:
#Class類的使用:
在java中除了靜態成員和普通數據類型不是對象以外,其余部分都可以看做對象,那類是誰的對象呢?類是java.lang.Class類的對象。即就是說任何一個類都是Class的實例對象,那如何表示?
?
其中c1、c2、c3都代表了A類的類類型(class type),同時我們完全可以通過類的類類型創建該類的對象實例,即可以通過c1 或 c2 或 c3創建A的對象實例:
?
此時如果A類中存在方法,就可以通過a1.方法,進行調用。但前提要求是需要有無參數的構造方法。
#動態加載類的使用:
對于Class.forName(“類的全稱”),不僅表示了類的類類型,還代表了動態加載類。使用示例代碼如下:
?
代碼解釋:通過一個OfficeAble接口的方式,實現不同類的加載。通過這樣的方式,我們可以動態加載不同的類,只需要修改類名即可,而原來的代碼不需要重新編譯,只需要寫新的類即可。
?
#基本數據類型/引用數據類型對應的類類型:
?
#通過類類型獲得類的信息:
?
?
#方法反射的基本操作:?
?
?
#通過反射了解集合泛型的本質:
?
本文關于反射機制使用方法來源:www.imooc.com/learn/199 (慕課網)
?申明:
?本文作者:逍破孩 ?
?未經許可,不得轉載。轉載請注明出處。
?注:新晉菜鳥歡迎大家糾錯,討論。
?
轉載于:https://www.cnblogs.com/xiaopohai97/p/5784209.html
總結
以上是生活随笔為你收集整理的关于java反射机制(基础篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL外键与外键关系说明(简单易懂)
- 下一篇: HDU 5861 Road 线段树区间更