黑馬程式設計師 反射技術

2021-06-22 00:41:42 字數 2127 閱讀 6433

動態載入乙個類,得到這個類中的所有內容。而且將位元組碼檔案封裝在乙個物件中(class物件),並將位元組碼中的內容都封裝成對像,這樣便於操作這些成員。可以說反射技術大大地增強了程式的擴張性,因為乙個類進行解刨後,可以對他進行很多操作。

①得到類的位元組碼,將這個類的位元組碼封裝在class物件中

②例項化物件,獲得類的屬性、方法和夠著函式。

③訪問屬性、呼叫方法、使用夠著函式建立物件。

①通過乙個類的物件,可以得到該類的位元組碼,格式為:物件名.getclass();

object obj = new demo();

class clazz = obj.getclass();

②通過類名,直接獲取該類的位元組碼,格式為:類名.class;

class clazz = demo.class;

③使用class類的forname方法,獲取指定的類的位元組碼,格式為:class.forname(「指定類名」),這種方式的擴張性強,因為我們不需要知道該類是否存在就可以編譯通過,在使用時建議使用這中方式獲取指定類的位元組碼。

class clazz = class.forname("cn.itcast.luntan.dmeo");

①反射類的建構函式

class clazz = demo.class;

constructor con = class.getconstructor("引數列表");

con.newinstance("引數列表");//建立物件

當然,這裡獲取的是有引數的建構函式,這樣一來在使用newinstance的時候必須指定乙個引數,為了便於擴充套件,在被反射的類中,我們通常要設定一無參建構函式,這樣建立物件的時候就不用傳遞引數了。

當然,如果沒有無參的建構函式,那必須獲取到指定引數的建構函式,使用該函式來進行例項化。

②反射類成員方法

class clazz = class.forname("cn.itcast.luntan.demo");

method method = clazz.getmethod(方法名稱,方法引數);

③反射字段

demo demo = new demo();

class clazz = demo.getclass();

field field = clazz.getfield(欄位名);

field.setaccessible(true);//暴力反射

field.setobject(value);//設定字段值

獲取類中的所有方法:

class clazz = class.forname("cn.itcast.luntan.demo");

method method = clazz.getmethods();//獲取公有方法和父類中的公有方法;

methods = clazz.getdeclaremethod();//獲取本類中的所有方法,包括私有方法

for(method method : methods)

method method = clazz.getmethod("show",int.class);

method.invoke(clazz,56);//執行指定類中的指定引數的方法

如果想要得到乙個類中的私有方法

那麼通過getdeclaremethod得到所有方法,但是私有方法時不能直接訪問的,如果要訪問,就要使用暴力反射

method.setaccessible(true);//一般很少用,既然都誰是私有的了,當然是不想讓人訪問了

因為靜態方法不屬於任何類,所以靜態方法在被反射的時候,就不需要指定在那個物件上的方法,(沒有你怎麼指定啊)

class clazz = class.forname("cn.itcast.luntan.demo");

method method = clazz.getmethod("function",int.class);

method.invoke(null,56);//這裡不需要指定在那個物件上呼叫方法

黑馬程式設計師 關於反射技術

asp.net android ios開發 net培訓 期待與您交流!反射類用於製作框架中。有了反射,在配置檔案中寫的 才能被解析。通過反射有三種方法可以載入類 1 classclazz class.forname cn.itcast.reflect.person class類代表某個類的位元組碼,...

黑馬程式設計師 反射

反射技術 實就是動態載入乙個指定的類,並獲取該類中的所有的內容。而且將位元組碼檔案封裝成物件,並將位元組碼檔案中的內容都封裝成物件,這樣便於操作這些成員。簡單說 反射技術可以對乙個類進行解剖。反射的好處 大大的加強了程式的擴充套件性。反射的基本步驟 1.獲得class物件,就是獲得指定的檔案的位元組...

黑馬程式設計師 反射

反射 理解 1 反射 在程式執行時期,是通過 class 檔案物件,去使用構造方法,成員變數,成員方法。2 獲取 class 檔案物件 1 object類的 getclass 方法2 資料型別的靜態的 class 屬性3 class類 forname 靜態方法 推薦 開發使用第三種。class類中的...