黑馬程序員——反射

Java反射機制是在運行狀態中,對於任意一個類,都能知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲Java語言的反射機制——Reflection。我們可以在Java程序運行時加載、探知、使用編譯期間完全未知的class,也就是說Java程序可以加載一個運行時才得知名稱的class,獲悉其完整構造(不包括methods定義),並生成其對象實體、或對其fields設值、或喚起其methods。

繼承自Object的子類都有Object的方法——Class<?>  getClass(),通過該方法可以獲取任意對象的Class對象(類的字節碼文件)。任意一個類的Class對象都只有一個,所以類的字節碼文件對象可以在併發編程中用作同步代碼塊的鎖。

除了Object的getClass()方法其他可以獲取Class對象的方法:
1.Class本身的靜態方法——static Class<?> forName(String className);
2.類名.class就是該類的字節碼文件對象;

Class類的方法:
1)Field getField(String name)——返回該類中由String類型字段名參數所指向的public類型的成員變量(Field類型);
2)Field[] getFields()——返回該類中所有public類型的成員變量的數組(Field[]類型);
3)Field getDeclaredField(String name)——返回該類中由String類型字段名所指向的已聲明的成員變量(Field類型);
4)Field[] getDeclaredFields()——返回該類中所有已聲明的成員變量的數組(Field[]類型);
5)Method getMethod(String name,Class<?>...parameterType)——返回該類中由String參數指代的方法名和Class<?>類型可變參數列表共同指向的public類型的成員方法(Method類型);
6)Method[]  getMethods()——返回該類中所有public類型成員方法的數組(Method[]類型);
7)Method getDeclaredMethod(String name,Class<?>...parameterType)——返回該類中由String參數指代的方法名和Class<?>類型可變參數列表共同指向的已聲明的成員方法(Method類型);
8)Method getDeclaredMethods()——返回該類中所有已聲明的成員方法的數組(Method[]類型);
9)Constructor<T> getConstructor(Class<?>...parameterType)——返回該類中由給定的 Class<?>類型可變參數列表確定的public類型的構造方法(Constructor類型);
10)Constructor<?>[] getConstructors()——返回該類中所有public類型的構造方法的數組(Constructor[]類型);
11)Constructor<T> getDeclaredConstructor(Class<?>...parameterType)——返回該類中由給定的 Class<?>類型可變參數列表確定的已聲明的構造方法(Constructor類型);
12)Constructor<?>[] getDeclaredConstructors()——返回該類中所有已聲明的構造方法的數組(Constructor[]類型);
13)String getName()——以String形式返回該類的名稱;

14)boolean isArray()——判斷該Class對象是否是數組類;
15)boolean isInstance(Object obj)——判斷該Class對象是否與指定的obj對象賦值兼容;
16)boolean isInterface()——判斷該Class對象是否表示一個接口類型;
17)boolean isPrimitive()——判斷該Class對象是否表示一個基本數據類型;

18)T newInstance()——創建該類的一個新實例;
19)URL getResource(String name)——獲取給定名稱所指代的文件的URL。

由以上方法可以引出一些新類型:
Field——成員變量;
Method——成員方法;
Constructor——構造方法;

Field類
Object get(Object obj)——獲得obj的該成員的Object對象;
byte getByte(Object obj)——用於獲取obj的byte類型成員的值;
short getShort(Object obj)——用於獲取obj的short類型成員的值;
int getInt(Object obj)——用於獲取obj的int類型成員的值;
long getLong(Object obj)——用於獲取obj的long類型成員的值;
float getFloat(Object obj)——用於獲取obj的float類型成員的值;
double getDouble(Object obj)——用於獲取obj的double類型成員的值;
boolean getBoolean(Object obj)——用於獲取obj的boolean類型成員的值;
void set(Object obj,Object value)——將obj的該成員的值賦作value;
void setByte(Object obj,byte b)——將obj的該byte類型成員的值賦作b;
......short、int、long、float、double、boolean等的set方法;
String getName()——返回該成員的名稱;
Class<?> getType()——返回該成員的類型。

Method類
String getName()——返回該方法的名稱;
Object invoke(Object obj,Object...args)——按給定Object類型參數列表調用obj的該方法,並返回結果(Object類型)。

Constructor類
T newInstance(Object...initargs)——調用該構造方法實例化對象(Object參數列表要與該方法的參數列表對應),T是實例化的對象。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章