Java筆記:反射
阿新 • • 發佈:2018-11-10
框架:即半成品的軟體,可以在其基礎上進行軟體開發,以簡化程式碼
反射:將類的各個組成部分封裝為其他物件,也即是反射機制
好處:
- 可以在程式執行過程中操作這些物件
- 可以解耦,提高程式的可擴充套件性
獲取class物件的方式:
1.Class.forName(“全類名”):將位元組碼檔案載入進記憶體,並返回Class物件
多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類
2.類名.class:通過類名的屬性class獲取
多用於引數的傳遞
3.物件.getClass():使用Object類定義的方法
多用於物件獲取位元組碼的方式
同一個位元組碼檔案(*.class)在一次程式執行過程中,只會被載入一次,無論使用何中方式獲取class物件,都是同一個
如何獲取內部類的反射?
Class.forName(“外部類名$內部類名”);
Class物件的功能
獲取功能
獲取成員變數們
* Field[] getFields() :獲取所有public修飾的成員變數
* Field getField(String name) 獲取指定名稱的 public修飾的成員變數
* Field[] getDeclaredFields() 獲取所有的成員變數,不考慮修飾符
* Field getDeclaredField(String name)
2. 獲取構造方法們
* Constructor<?>[] getConstructors()
* Constructor<T> getConstructor(Class<?>... parameterTypes)
* Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
* Constructor<?>[] getDeclaredConstructors()
3. 獲取成員方法們:
* Method[] getMethods()
* Method getMethod(String name, Class<?>... parameterTypes)
* Method[] getDeclaredMethods()
* Method getDeclaredMethod(String name, Class<?>... parameterTypes)
4. 獲取全類名
* String getName()
Field:成員變數
1.設定值
void set(Object,Object value)
obj為該類的具體物件
2.獲取值
Object get(Object obj)
3.忽略訪問修飾符的安全檢查
void setAccessible(true)
也叫暴力反射
Constructure:構造方法
建立物件:
T newInstance(Object...initargs)
如果使用空引數構造方法建立物件,操作可以簡化:Class物件的newInstance方法
Method:成員方法物件
執行方法:
Object invoke(Object obj,Object...args)
獲取方法名稱:
String getName()