Java反射機(jī)制

JAVA反射機(jī)制

? ? ? JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制。

獲取Class對(duì)象有三種方式:

1.通過(guò)Object類的getClass()方法。例如:

Class c1 = new String("").getClass();

2.通過(guò)Class類的靜態(tài)方法——forName()來(lái)實(shí)現(xiàn):

Class c2 = Class.forName("MyObject"); ? ? ? ? //傳入一個(gè)類名的字符串

3.如果T是一個(gè)已定義的類型的話,在java中,它的.class文件名:T.class就代表了與其匹配的Class對(duì)象,例如:

Class c3 = Manager.class;

Class c4 = int.class;

Class c5 = Double[].class;

了解類的信息

獲得本類聲明的方法

getName();? ? ? //這個(gè)方法就是返回String形式的該類的簡(jiǎn)要描述

獲得所有方法

ClassdogClazz = Dog.class;

Method[] methods = dogClazz.getMethods(); ? ? ? ? //獲得所有公共的方法

Method[] methods2 = dogClazz.getDeclaredMethods(); ? ? ? ? ? ?//獲得自己定義的方法

獲得父類信息

Class superClazz = chineseClazz.getSuperclass();

獲得接口信息

Class[] interfaceClazz = chineseClazz.getInterfaces();

根據(jù)Class對(duì)象創(chuàng)建instance

方法1

ClassdogClazz = Dog.class;

Object o = dogClazz.newInstance(); ? ? ? ? ? //Dog類中必須有無(wú)參的構(gòu)造函數(shù)

方法2

Constructor c = dogClazz.getConstructor(new Class[]{String.class, int.class}); ? ? ?//根據(jù)Dog類中的構(gòu)造函數(shù),創(chuàng)建一個(gè)構(gòu)造器。

Dog o2 = (Dog) c.newInstance("xiaohei",3);

操作成員變量

ClassdogClazz = Dog.class;

Object o = dogClazz.newInstance();

Field[] fields = dogClazz.getFields();

for(Field f: fields){

System.out.println(f.getName());

}

Field field = dogClazz.getField("name");

field.set(o, "zhangsan");

Field field2 = dogClazz.getDeclaredField("age");

field2.setAccessible(true); ? ? ? ? ? ? ? ? ? ? //否則不能訪問(wèn)到Dog類中的私有變量

field2.set(o, 3);

調(diào)用成員方法

ClassdogClazz = Dog.class;

Object o = dogClazz.newInstance();

Method m = dogClazz.getMethod("bark", new Class[]{Dog.class}); ? ? ? //傳入方法名,和參數(shù)

m.invoke(o, new Object[]{o}); ? ? ? ? ? ? ? ? //調(diào)用方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容