1. 什麼是Java的反射?
要讓Java程序能夠運行,就得讓Java類被Java虛擬機加載。Java類如果不被Java虛擬機加載就不能正常運行。正常情況下,我們運行的所有的程序在編譯期時候就已經把那個類被加載了。
Java的反射機制是在編譯時並不確定是哪個類被加載了,而是在程序運行的時候才加載、探知、自審。使用的是在編譯期並不知道的類。這樣的編譯特點就是java反射。
2. Java反射的作用?
假如有兩個程序員,一個程序員在寫程序的時需要使用第二個程序員所寫的類,但第二個程序員並沒完成他所寫的類。那麼第一個程序員的代碼是不能通過編譯的。此時,利用Java反射的機制,就可以讓第一個程序員在沒有得到第二個程序員所寫的類的時候,來完成自身代碼的編譯。
Java的反射機制它知道類的基本結構,這種對Java類結構探知的能力,我們稱爲Java類的“自審”。如eclipse中,一按點,編譯工具就會自動的把該對象能夠使用的所有的方法和屬性全部都列出來,供用戶進行選擇。這就是利用了Java反射的原理,是對我們創建對象的探知、自審。
3. Class類
要正確使用Java反射機制就得使用java.lang.Class這個類。它是Java反射機制的起源。當一個類被加載以後,Java虛擬機就會自動產生一個Class對象。通過這個Class對象我們就能獲得加載到虛擬機當中這個Class對象對應的方法、成員以及構造方法的聲明和定義等信息。
4. 反射API
u反射API用於反應在當前Java虛擬機中的類、接口或者對象信息
u功能
1) 獲取一個對象的類信息.
2) 獲取一個類的訪問修飾符、成員、方法、構造方法以及超類的信息.
3) 檢獲屬於一個接口的常量和方法聲明.
4) 創建一個直到程序運行期間才知道名字的類的實例.
5) 獲取並設置一個對象的成員,這個成員的名字是在程序運行期間才知道.
總結: 使用反射機制的步驟
首先: 導入java.lang.relfect 包
然後: 遵循三個步曲:
(1)獲得你想操作的類的 java.lang.Class 對象
(2)調用諸如 getDeclaredMethods 的方法
(3)使用反射API 來操作這些信息
獲得Class對象的三種方法
1.已經得到一個類的實例,可以使用如下方式來得到Class對象:
Class c = 對象名.getClass();
例:TextField t = new TextField();
Class c = t.getClass();
Class s = c.getSuperclass();
2.如果在編譯期知道類的名字,可以使用如下方法:
Class c = java.awt.Button.class;
或
Class c = Integer.TYPE;
3.如果類名在編譯期不知道, 但是在運行期可以獲得, 可以使用下面的方法:
Class c = Class.forName(str);
注意:str是類的全路徑