? 反射獲取Class對象
? 三種方法獲取
Class classz=對象.class;
對象 A=new 對象();
Class AA=A.getClass();
Class .forName("類的全路徑");
類的加載器,將Class文件加載到虛擬機(jī)中,會有一個Class對象
而反射第一步就是獲得class文件的字節(jié)碼對象的Class對象
? 實例:
○ Class cs=Class.forName("類的全路徑");
○ 默認(rèn)的無參數(shù)的構(gòu)造方法創(chuàng)建對象
○ Person P=cs.newInstance();
采用有參數(shù)的構(gòu)造方法來創(chuàng)建對象?cs.getConstructor(String.class,Integer.class);//創(chuàng)建的是一個帶(String,int)的對象
c.newInstance("參數(shù)1","參數(shù)2(Integer)");
? 獲取屬性(公有的)?cs.getField("屬性名");//獲得某一個屬性
Cs.getFields();//獲取所有的屬性
? 獲取所有的屬性
○ Field field=cs.getDeclaredField("屬性名");//獲取一個屬性(私有或者公有)
!!!必須設(shè)置成可以訪問
Field.setAccessible("true");//設(shè)置可以訪問
○ 使用:
§ Field.get(實例對象);//得到實例對象里的值
? 獲取方法
○ M=Class對象.getDeclaredMethod("方法名");
○ M.setAccessible("true");設(shè)置可以訪問
執(zhí)行方法:
M.invoke(實例對象);
獲取帶參數(shù)的方法
Cs.getDeclaredMethod("方法名",參數(shù)的Class對象);
M.invoke("執(zhí)行的對象","參數(shù)");
image.png