*反射:將類的各個組成部分封裝為其他物件,這就是反射機制
* 好處:
1. 可以在程式執行過程中,操作這些物件。
2. 可以解耦,提高程式的可擴充套件性。
獲取class物件的方式:
1.class.forname("全類名"):將位元組碼檔案載入進記憶體,返回class物件
* 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類
2.類名.class:通過類名的屬性class獲取
* 多用於引數的傳遞
3.物件.getclass():getclass()方法在object類中定義著。
* 多用於物件的獲取位元組碼的方式
* 結論:
同乙個位元組碼檔案(*.class)在一次程式執行過程中,只會被載入一次,不論通過哪一種方式獲取的class物件都是同乙個。
* class物件功能:
* 獲取功能:
1. 獲取成員變數們
* fieldgetfields() :獲取所有public修飾的成員變數
* field getfield(string name) 獲取指定名稱的 public修飾的成員變數
* field getdeclaredfields() 獲取所有的成員變數,不考慮修飾符
* field getdeclaredfield(string name)
2. 獲取構造方法們
* constructor<?>getconstructors()
* constructorgetconstructor(類<?>... parametertypes)
* constructorgetdeclaredconstructor(類<?>... parametertypes)
* constructor<?> getdeclaredconstructors()
3. 獲取成員方法們:
* methodgetmethods()
* method getmethod(string name, 類<?>... parametertypes)
* method getdeclaredmethods()
* method getdeclaredmethod(string name, 類<?>... parametertypes)
4. 獲取全類名
* stringgetname()
* constructor:構造方法
* 建立物件:
* t newinstance(object... initargs)
* 如果使用空引數構造方法建立物件,操作可以簡化:class物件的newinstance方法
* method:方法物件
* 執行方法:
* object invoke(object obj, object... args)
* 獲取方法名稱:
* string getname:獲取方法名
javase複習 反射
反射 當位元組碼檔案載入到記憶體時,會進行解剖建立乙個對應的class物件,把位元組碼檔案的資訊都儲存進去。通過class物件使用位元組碼物件設定物件屬性,呼叫物件方法的過程叫做反射!person p new person 110,狗娃 class clazz1 class.forname cn.i...
反射的複習
反射 reflect 為什麼要用反射?把物件的集合轉為二維陣列,其實是把物件轉為陣列 把任意型別的物件轉為其屬性的陣列 什麼是反射?在程式執行時通過class類的物件獲取該物件所代表的類的資訊,以及操作。獲取class的物件 1.直接使用類,使用類名。class無論哪種方式,拿到的都是同乙個物件 c...
C 複習反射
反射中常用方法 1 獲取物件型別 2 one one new one 3 type t one.gettype 45 動態載入 6 assembly a assembly.loadfile path 7 獲取所有公共類 8 type tys assembly.getexportedtypes 910...