java反射機(jī)制

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

Class對象

可以直接通過類.class獲取。
例如獲取String的class對象

Class cls = String.class;

也可以通過類名進(jìn)行獲取

Class cls = Class.forName("java.lang.String");

類名

可以通過class對象的getName()方法獲取類名,getSimpleName()獲取不帶包名的類名

//帶包類名
String name = cls.getName();

//不帶包名的類名
String simpleName = cls.getSimpleName();

方法

Method[] methods = cls.getMethods();

getMethods()可以獲取到該類中所有的public方法
也可以獲取到單個方法

Method method = cls.getMethod("method",new Class[]{String.class});

第一個參數(shù)是方法的名字,第二個參數(shù)是方法的參數(shù),這里是以只有一個string類型的參數(shù)為例。如果沒有參數(shù)傳入null即可
如果已經(jīng)知道方法,也可以獲取到方法的參數(shù)

Class[] parameterTypes = method.getParameterTypes();

當(dāng)然也可以返回方法的返回類型

Class returnType = method.getReturnType();

可以通過invoke()方法來調(diào)用方法需要傳2個參數(shù),第一個參數(shù)是調(diào)用方法的對象,如果是靜態(tài)方法可以傳入null第二個參數(shù)是方法需要的參數(shù)列表

Object returnValue = method.invoke(null, "parameter");

構(gòu)造方法

構(gòu)造方法和普通方法類似

Constructor[] constructors = cls.getConstructors();
Constructor constructor = cls.getConstructor(new Class[]{String.class});
Class[] parameterTypes = constructor.getParameterTypes();

可以使用constructornewInstance()方法實(shí)例一個對象

String str = (String) constructor.newInstance("test");

屬性

Field[] fields = cls.getFields();
Field field = cls.getField("name");

可以通過getFields()方法獲取所有的public屬性,getField()獲取指定的方法,當(dāng)然也只能獲取public的屬性。
在反射中也可以獲取private的屬性和方法以下分別進(jìn)行演示

Package pack = cls.getPackage();

父類

java是單繼承最多一個父類

Class supercls = cls.getSuperclass();

實(shí)現(xiàn)的接口

一個類可以實(shí)現(xiàn)多個接口

Class[] interfaces = cls.getInterfaces();

這里只會返回該類實(shí)現(xiàn)的接口,而不會返回父類實(shí)現(xiàn)的接口

文章參考
https://baike.baidu.com/item/JAVA%E5%8F%8D%E5%B0%84%E6%9C%BA%E5%88%B6/6015990?fr=aladdin
http://www.itdecent.cn/p/2315dda64ad2

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

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

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