1. 程式人生 > >反射常見方法

反射常見方法

反射概念:旨在執行的狀態中,動態獲取資訊及動態呼叫物件方法的功能
3個動態性質:
執行時生成物件的例項
執行期間呼叫方法
執行時更改屬性

Classs繼承Object
反射常用的類:
Class類:反射的核心,反射所有的操作都是圍繞該類來生成的。通過Class類獲取類的屬性,方法等內容;
Filed類:表示類的屬性,可獲取和設定類中的屬性的值
Method類:表示類的方法,用來獲取類中方法的資訊,或者執行方法;
Constructor類:表示類的構造方法;

1獲取類的資訊
第一步獲取Class的物件
a  呼叫getClass()方法
Student p=new Student();
 Class cla=p.getClass();不用知道類是什麼,知道某個類的物件就可以返回該物件對應類的物件
可以不知道Student類的存在,知道去物件p就可以獲取Student類對應的Class物件

b 呼叫class屬性
Class cla=Student.class;
這種需要在編譯期間就要知道類的名稱

c 使用Class類的forName()靜態方法:
這種需要在編譯期間就要知道類的名稱
括號內必須傳入字串,它必須是某個類的全名,類名前要新增完整的包名:
Class cla=Class.for("com.pb.jadv.reflection.Student");


每個類都有一個Class描述
建立物件
>>>>>使用Class物件的newInstance()建立物件   前提是類有預設的構造方法
Class cla=Love.class;
Love  loeo;
loeo = (Love) cla.newInstance();
System.out.println(loeo.toString());

>>>>>使用Constructor物件建立物件   指定預設的構造方法
Class cla=Love.class;
Constructor cu = cla.getConstructor(String.class, int.class);
Love lolo = (Love) cu.newInstance("小王", 26);
System.out.println(lolo.toString());

方法:
訪問不包含屬性的方法
方法一
1 .Method getMethod(Stingsname,Class[][arams)//訪問指定型別的方法
2.Method[]  getMethods()//返回public 的Method陣列

3.Method getDeclaredMethod(Stingsname,Class[][arams)//訪問所有的方法中指定型別的方法,與屬性級別無關
4Method[]  getDeclaredMethods()//返回所有Method陣列


訪問包含屬性的public
方法二
1.Filed getFiled(String name)//訪問包含屬性指定型別的public方法
2.Filed[] getFileds()//:》》》返回陣列

3.Filed getDeclaredFiled(String name)//訪問所有方法中指定屬性型別的方法與屬性級別無關
4.Filed[] getDeclaredFileds()//所有方法:》》》返回陣列
訪問類的屬性Filed
通過 Xxx getXxx(Object obj)獲取物件屬性對應的(8基本資料型別)的屬性值
Object get(Object obj) 獲得物件的屬性為引用型別屬性值
void setXxx(Object obj,Xxx val) 把物件屬性對應的的值設定為(8中)基本資料型別屬性值
void set(Object obj,Xxx val) //把物件的屬性設定為Val ,針對引用型別
void setAccessible(bool flg)對獲取到的屬性設定訪問許可權,true,可以對私有屬性取值和賦值