反射 框架設計的靈魂

2021-09-21 14:40:40 字數 1315 閱讀 3894

* 獲取class物件的方式:

1. class.forname("全類名"):將位元組碼檔案載入進記憶體,返回class物件

* 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類

2. 類名.class:通過類名的屬性class獲取

* 多用於引數的傳遞

3. 物件.getclass():getclass()方法在object類中定義著。

* 多用於物件的獲取位元組碼的方式

* 結論:

同乙個位元組碼檔案(*.class)在一次程式執行過程中,

只會被載入一次,不論通過哪一種方式獲取的class物件都是同乙個。

* class物件功能:

* 獲取功能:

1. 獲取成員變數們

* field getfields() :獲取所有public修飾的成員變數

* field getfield(string name) 獲取指定名稱的 public修飾的成員變數

* field getdeclaredfields() 獲取所有的成員變數,不考慮修飾符

* field getdeclaredfield(string name)

2. 獲取構造方法們

* constructor<?> getconstructors()

* constructorgetconstructor(類<?>... parametertypes)

* constructorgetdeclaredconstructor(類<?>... parametertypes)

* constructor<?> getdeclaredconstructors()

3. 獲取成員方法們:

* method getmethods()

* method getmethod(string name, 類<?>... parametertypes)

* method getdeclaredmethods()

* method getdeclaredmethod(string name, 類<?>... parametertypes)

4. 獲取全類名

* string getname()

獲取值

忽略訪問許可權修飾符的安全檢查

constructor:構造方法

method:方法物件

執行方法:

獲取方法名稱:

案例:需求:寫乙個"框架",不能改變該類的任何**的前提下,可以幫我們建立任意類的物件,並且執行其中任意方法

反射 框架設計的靈魂

可以在程式執行過程中,操作這些物件 可以解耦提高程式的可擴充套件性 class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件,多用於配置檔案,將類名定義在配置檔案中,讀取檔案,載入類 類名.class 通過類名的屬性class獲取,多用於引數的傳遞 物件.getclass ...

反射 框架設計的靈魂

獲取 class 物件的方式 1.class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類 2.類名.class 通過類名的屬性class獲取 多用於引數的傳遞 3.物件.getclass getclass 方法在 ...

反射基礎 框架設計的靈魂

1.class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類 2.類名.class 通過類名的屬性class獲取 多用於引數的傳遞 3.物件.getclass getclass 方法在object類中定義著。多用於物...