java反射基礎

2021-09-23 18:10:56 字數 1683 閱讀 1024

反射

* 反射:將類的各個組成部分封裝為其他物件,這就是反射機制

* 好處:

1. 可以在程式執行過程中,操作這些物件。

2. 可以解耦,提高程式的可擴充套件性。

* 獲取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()  

* field:成員變數

* 操作:

1. 設定值

* void set(object obj, object value)  

2. 獲取值

* get(object obj) 

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

* setaccessible(true):暴力反射

* constructor:構造方法

* 建立物件:

* t newinstance(object... initargs)  

* 如果使用空引數構造方法建立物件,操作可以簡化:class物件的newinstance方法

* method:方法物件

* 執行方法:

* object invoke(object obj, object... args)  

* 獲取方法名稱:

* string getname:獲取方法名

Java基礎 反射

public class getconstructor1 獲取乙個類的所有構造方法,包括似有的 constructor constructors2 clazz1.getdeclaredconstructors for constructor constructor constructors2 獲取單...

java反射基礎

反射就是在執行時才知道要操作的類是什麼,並且可以在執行時獲取類的完整構造,並呼叫對應的方法。1 通過 class 類獲取成員變數 成員方法 介面 超類 構造方法 getname 獲得類的完整名字。getfields 獲得類的public型別的屬性。getdeclaredfields 獲得類的所有屬性...

Java基礎之反射

1.反射 將類的各個組成部分封裝為其他物件,這就是反射機制 好處 1.可以在程式執行過程中,操作這些物件 2.可以解耦,提高程式的可擴充套件性 2.獲取class物件的幾種方式 1.class.forname 全類名 將位元組碼檔案載入進來,返回class物件 2.類名.class 通過類名的屬性c...