動態載入乙個類,得到這個類中的所有內容。而且將位元組碼檔案封裝在乙個物件中(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類中的...