獲取反射入口(class對象)的三種方法

要想操作反射,必須先拿到反射的入口

1,通過通過Class.forName("全類名")

try {

Class> perClazz = Class.forName("reflect_fanshe.Person");

System.out.println(perClazz);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

2,類名.class

Class> perClazz2 = Person.class;

3,對象.getClass()

Person person = new Person();

Class> perClazz3 = person.getClass();

三,根據反射入口對象(class)獲取類的各種信息

可以用一個類的反射入口class對象獲取類的所有信息

例1:perClazz.getMethods() 獲取此類的所有public方法(父類的,實現接口的,自己的)

Class> perClazz = null;

try {

perClazz = Class.forName("reflect_fanshe.Person");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

Method[] methods = perClazz.getMethods();

//遍歷所有方法

for (Method method : methods) {

System.out.println(method);

}

}

例2:獲取所有的構造方法

獲取反射入口(class對象)的三種方法

例3: 獲取父類

獲取反射入口(class對象)的三種方法

例4:獲取當前類(只有本類的)的所有方法和屬性,包括私有的

獲取反射入口(class對象)的三種方法

獲取反射入口(class對象)的三種方法

重要:可以獲取當前類的對象,並通過對象調用類的方法

四,通過反射獲取對象的實例,並操作對象

1,class.newInstance() ,並強轉類型,然後就可以操作對象了,主要是調用方法。

獲取反射入口(class對象)的三種方法

2,操作屬性,可以操作類裡面的public屬性和private屬性

如果屬性是private,正常情況下是不允許外界操作屬性值,這裡可以用Field類的setAccessible(true)方法,暫時打開操作的權限

獲取反射入口(class對象)的三種方法

調用方法也一樣,可以調用私有的方法,null是因為這個方法沒有參數

獲取反射入口(class對象)的三種方法

五,在 程序執行中,動態的決定調用的類,以及方法

在本例中,程序執行之前,程序根本不知道具體的類和方法名是什麼,需要執行時解析properties文件,但是反射就可以辦到。

配置文件:

獲取反射入口(class對象)的三種方法

反射機制:


獲取反射入口(class對象)的三種方法


分享到:


相關文章: