JAVA中反射機制六(java.lang.reflect包)
一、簡介
java.lang.reflect包提供了用於獲取類和對象的反射信息的類和接口。反射API允許對程序訪問有關加載類的字段,方法和構造函數的信息進行編程訪問。它允許在安全限制內使用反射的字段,方法和構造函數對其底層對等進行操作。
二、java.lang.reflect AccessibleObject類
java.lang.reflect.AccessibleObject類是Field,Method和Constructor類對象的基類。 它提供了將反射對象標記為在使用它時抑制默認Java語言訪問控制檢查的功能。 當使用Fields,Methods或Constructors類對象來設置或獲取字段,調用方法,或創建和初始化新的類實例時,執行訪問分別檢查(對於public,默認(包)訪問,protected和private成員) 。 在反射對象中設置可訪問標誌允許具有足夠權限的復雜應用程序(如Java對象序列化或其他持久性機制)以被禁止的方式操作對象。
類聲明
以下是java.lang.reflect.AccessibleObject
類的聲明 -
public class AccessibleObject
extends Object
implements AnnotatedElement
構造函數
編號 | 構造函數 | 描述 |
---|---|---|
1 | protected AccessibleObject() |
構造函數:僅由Java虛擬機使用。 |
類方法
編號 | 構造函數 | 描述 |
---|---|---|
1 | T getAnnotation(Class annotationClass) | 如果存在註解,則返回該元素的指定類型的註解,否則返回null 。 |
2 | Annotation[] getAnnotations() | 返回此元素上存在的所有註解。 |
3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有註解。 |
4 | boolean isAccessible() | 獲取此對象的可訪問標誌的值。 |
5 | boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) | 如果此元素上存在指定類型的註解,則返回true,否則返回false。 |
6 | static void setAccessible(AccessibleObject[] array, boolean flag) | 使用單一安全檢查來設置對象數組的可訪問標誌的一個方便的方法(為了效率)。 |
7 | void setAccessible(boolean flag) | 將此對象的可訪問標誌設置為指示的布爾值。 |
三、java.lang.reflect.Array類
java.lang.reflect.Array
類提供靜態方法來動態創建和訪問Java
數組。 Array
允許在get
或set
操作期間擴展轉換,但如果發生縮小轉換,則會拋出IllegalArgumentException
異常
類聲明
以下是java.lang.reflect.Array
類的聲明 -
public final class Array
extends Object
類方法
序號 | 方法 | 描述 |
---|---|---|
1 | static Object get(Object array, int index) | 以對象形式返回指定數組對象中的索引組件的值。 |
2 | static boolean getBoolean(Object array, int index) | 以布爾值形式返回指定數組對象中的索引組件的值。 |
3 | static byte getByte(Object array, int index) | 以字節形式返回指定數組對象中的索引組件的值。 |
4 | static char getChar(Object array, int index) | 以char 形式返回指定數組對象中的索引組件的值。 |
5 | static double getDouble(Object array, int index) | 以double 形式返回指定的數組對象的索引組件的值。 |
6 | static float getFloat(Object array, int index) | 以float 形式返回指定數組對象中的索引組件的值。 |
7 | static int getInt(Object array, int index) | 以int 形式返回指定數組對象中的索引組件的值。 |
8 | static int getLength(Object array) | 以int 形式返回指定數組對象的長度。 |
9 | static long getLong(Object array, int index) | 以long 形式返回指定數組對象中的索引組件的值。 |
10 | static short getShort(Object array, int index) | 以short 形式返回指定數組對象中的索引組件的值。 |
11 | static Object newInstance(Class<?> componentType, int dimensions) | 創建具有指定組件類型和維度的新數組。 |
12 | static Object newInstance(Class<?> componentType, int length) | 創建具有指定組件類型和長度的新數組。 |
13 | static void set(Object array, int index, Object value) | 將指定數組對象的索引組件的值設置為指定的新值。 |
14 | static void setBoolean(Object array, int index, boolean z) | 將指定數組對象的索引組件的值設置為指定的布爾值。 |
15 | static void setByte(Object array, int index, byte b) | 將指定數組對象的索引組件的值設置為指定的字節值。 |
16 | static void setChar(Object array, int index, char c) | 將指定數組對象的索引組件的值設置為指定的char 值。 |
17 | static void setDouble(Object array, int index, double d) | 將指定數組對象的索引組件的值設置為指定的double 值。 |
18 | static void setFloat(Object array, int index, float f) | 將指定數組對象的索引組件的值設置為指定的浮點值。 |
19 | static void setInt(Object array, int index, int i) | 將指定數組對象的索引組件的值設置為指定的int 值。 |
20 | static void setLong(Object array, int index, long l) | 將指定數組對象的索引組件的值設置為指定的長整型值。 |
21 | static void setShort(Object array, int index, short s) | 將指定數組對象的索引組件的值設置為指定的短整型值。 |
方法繼承
此類繼承以下類的方法 -
java.lang.Object
四、java.lang.reflect Constructor<T>類
java.lang.reflect.Constructor類提供了一個類的單個構造函數的信息和訪問權限。 構造函數允許在將實際參數傳到newInstance()與底層構造函數的形式參數進行匹配時進行擴展轉換,但如果發生縮小轉換,則會拋出IllegalArgumentException異常。
類聲明
以下是java.lang.reflect.Constructor
類的聲明 -
public final class Constructor
extends AccessibleObject
implements GenericDeclaration, Member
Java
類方法
序號 | 方法 | 描述 |
---|---|---|
1 | boolean equals(Object obj) | 將此構造函數與指定對象進行比較。 |
2 | T getAnnotation(ClassannotationClass) | 如果存在這樣的註釋,則返回該元素的指定類型的註釋,否則返回null 。 |
3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有註釋。 |
4 | Class getDeclaringClass() | 返回表示由此構造函數對象表示的構造函數的類的Class 對象。 |
5 | Class<?>[] getExceptionTypes() | 返回一個Class 對象數組,該數組表示由此構造方對象表示的底層構造函數聲明的異常類型。 |
6 | Type[] getGenericExceptionTypes() | 返回一個Type 對象數組,它以聲明順序表示由此構造方法對象表示的方法的形式參數類型。 |
7 | Type[] getGenericParameterTypes() | 返回一個Type 對象數組,它以聲明順序表示由此構造方法對象表示的方法的形式參數類型。 |
8 | int getModifiers() | 返回由此Constructor 對象表示的構造函數的Java 語言修飾符,以整數形式返回。 |
9 | String getName() | 以字符串形式返回此構造函數的名稱。 |
10 | Annotation[][] getParameterAnnotations() | 返回一個數組數組,表示由Constructor 對象表示的方法的形式參數(以聲明順序)的註釋。 |
11 | Class<?>[] getParameterTypes() | 返回一個Class 對象數組,它們以聲明順序表示由此構造函數對象表示的構造函數的形式參數類型。 |
12 | int hashCode() | 返回此構造函數的哈希碼。 |
13 | boolean isSynthetic() | 如果此構造函數是合成構造函數,則返回true ; 否則返回false 。 |
14 | boolean isVarArgs() | 如果該構造函數被聲明為采用可變數量的參數,則返回true ; 否則返回false 。 |
15 | T newInstance(Object… initargs) | 使用此Constructor 對象表示的構造函數,使用指定的初始化參數來創建和初始化構造函數的聲明類的新實例。 |
16 | String toGenericString() | 返回描述此構造方法的字符串,包括類型參數。 |
17 | String toString() | 返回描述此構造函數的字符串。 |
五、java.lang.reflect.Field類
java.lang.reflect.Field類提供有關類或接口的單個字段的信息和動態訪問。反射的字段可以是類(靜態)字段或實例字段。字段允許在獲取或設置訪問操作期間擴展轉換,但如果發生縮小轉換,則會引發IllegalArgumentException。
類聲明
以下是java.lang.reflect.Field
類的聲明 -
public final class Field
extends AccessibleObject
implements Member
Java
類方法
序號 | 方法 | 描述 |
---|---|---|
1 | boolean equals(Object obj) | 將此字段與指定對象進行比較。 |
2 | Object get(Object obj) | 返回指定對象上由Field 表示的字段的值。 |
3 | T getAnnotation(ClassannotationClass) | 如果存在這樣的註釋,則返回該元素的指定類型的註釋,否則返回null 。 |
4 | boolean getBoolean(Object obj) | 獲取靜態或實例布爾字段的值。 |
5 | byte getByte(Object obj) | 獲取靜態或實例字節字段的值。 |
6 | char getChar(Object obj) | 獲取char 類型的靜態或實例字段的值,或者通過加寬轉換可轉換為char 類型的另一個基本類型的值。 |
7 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有註釋。 |
8 | Class<?> getDeclaringClass() | 返回表示聲明由Field 對象表示的字段的類或接口的Class 對象。 |
9 | double getDouble(Object obj) | 獲取double 類型的靜態或實例字段的值,或者通過加寬轉換可轉換為double 類型的另一個基本類型的值。 |
10 | float getFloat(Object obj) | 獲取類型為float 的靜態或實例字段的值,或者通過加寬轉換可轉換為float 類型的另一個原始類型的值。 |
11 | Type getGenericType() | 返回一個Type 對象,該對象表示由Field 對象表示的字段的聲明類型。 |
12 | int getInt(Object obj) | 獲取類型為int 的靜態或實例字段的值,或者通過加寬轉換可轉換為類型int 的另一個原始類型的值。 |
13 | long getLong(Object obj) | 獲取long 類型的靜態或實例字段的值,或者通過擴展轉換可轉換為long 類型的另一個原始類型的值。 |
14 | int getModifiers() | 返回由Field 對象表示的字段的Java語言修飾符,以整數形式返回。 |
15 | String getName() | 返回Field 對象表示的字段的名稱。 |
16 | short getShort(Object obj) | 獲取類型為short 的另一個原始類型的靜態或實例字段的值,通過加寬轉換可轉換為short 類型。 |
17 | Class<?> getType() | 返回一個Class 對象,用於標識Field 對象所表示的字段的聲明類型。 |
18 | int hashCode() | 返回Field 的哈希碼。 |
19 | boolean isEnumConstant() | 如果字段表示枚舉類型的元素,則返回true ; 否則返回false 。 |
20 | boolean isSynthetic() | 將指定對象參數上的Field 對象表示的字段設置為指定的新值。 |
21 | void setBoolean(Object obj, boolean z) | 為指定對象上字段的值設置為布爾值。 |
22 | void setByte(Object obj, byte b) | 為指定對象上字段的值設置為字節值。 |
23 | void setChar(Object obj, char c) | 為指定對象上字段的值設置為字符值。 |
24 | void setDouble(Object obj, double d) | 為指定對象上字段的值設置為double 值。 |
25 | void setFloat(Object obj, float f) | 為指定對象上字段的值設置為浮點數。 |
26 | void setInt(Object obj, int i) | 為指定對象上字段的值設置為int 值。 |
27 | void setLong(Object obj, long l) | 為指定對象上字段的值設置為long 值。 |
28 | void setShort(Object obj, short s) | 為指定對象上字段的值設置為short 值。 |
29 | String toGenericString() | 返回描述此Field 對象的字符串,包括其通用類型。 |
30 | String toString() | 返回描述此Field 對象的字符串。 |
方法繼承
- java.lang.reflect.AccessibleObject
- java.lang.Object
六、java.lang.reflect.Method類
java.lang.reflect.Method類提供有關類或接口上單個方法的信息和訪問權限。反映的方法可以是類方法或實例方法(包括抽象方法)。 當匹配實際參數以使用底層方法的形式參數調用時,方法允許擴展轉換,但如果發生縮小轉換,則會引發IllegalArgumentException異常。
類聲明
以下是java.lang.reflect.Method
類的聲明 -
public final class Method<T>
extends AccessibleObject
implements GenericDeclaration, Member
Java
類方法
序號 | 方法 | 描述 |
---|---|---|
1 | boolean equals(Object obj) | 將此方法與指定的對象進行比較。 |
2 | T getAnnotation(ClassannotationClass) | 如果存在這樣的註釋,則返回該元素的指定類型的註釋,否則返回null 。 |
3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有註釋。 |
4 | Class getDeclaringClass() | 返回表示聲明由此Method 對象表示方法類的Class 對象。 |
5 | Object getDefaultValue() | 返回此Method 實例表示的註釋成員的默認值。 |
6 | Class<?>[] getExceptionTypes() | 返回一個Class 對象數組,該數組表示由此構造方對象表示的底層構造函數聲明的異常類型。 |
7 | Type[] getGenericExceptionTypes() | 返回一個Type 對象的數組,表示聲明為此Constructor 對象拋出的異常。 |
8 | Type[] getGenericParameterTypes() | 返回一個Type 對象數組,它以聲明順序表示由此構造方法對象表示的方法的形式參數類型。 |
9 | Type getGenericReturnType() | 返回一個Type 對象,該對象表示此Method 對象表示的方法的正式返回類型。 |
10 | int getModifiers() | 返回由此Method 對象表示的方法的Java語言修飾符,以整數形式返回。 |
11 | String getName() | 以字符串形式返回此方法的名稱。 |
12 | Annotation[][] getParameterAnnotations() | 返回一個數組數組,它們以聲明順序表示由此Method 對象表示的方法的形式參數的註釋。 |
13 | Class<?>[] getParameterTypes() | 返回一個Class 對象數組,它們以聲明順序表示由此Method 對象表示的構造函數的形式參數類型。 |
14 | Class<?> getReturnType() | 返回一個Class 對象,該對象表示此Method 對象表示的方法的正式返回類型。 |
15 | int hashCode() | 返回此構造函數的哈希碼。 |
16 | Object invoke(Object obj, Object…args) | 在具有指定參數的指定對象上調用此Method 對象表示的底層方法。 |
17 | boolean isBridge() | 如果此方法是橋接方法,則返回true ; 否則返回false 。 |
18 | boolean isSynthetic() | 如果此方法是合成方法,則返回true ; 否則返回false 。 |
19 | boolean isVarArgs() | 如果此方法被聲明為使用可變數量的參數,則返回true ; 否則返回false 。 |
20 | String toGenericString() | 返回描述此方法的字符串,包括類型參數。 |
21 | String toString() | 返回描述此方法的字符串。 |
方法繼承
此類繼承以下類的方法 -
- java.lang.reflect.AccessibleObject
- java.lang.Object
七、java.lang.reflect.Modifier類
java.lang.reflect.Modifier類提供了用於解碼類和成員訪問修飾符的靜態方法和常量。修飾符集合被表示為具有表示不同修飾符的不同位位置的整數。
類聲明
以下是java.lang.reflect.Modifier
類的聲明 -
public class Modifier
extends Object
Java
字段
以下是java.lang.reflect.Modifier
類的字段 -
- static int ABSTRACT - 表示
abstract
修飾符的int
值。 - static int FINAL - 表示
final
修飾符的int
值。 - static int INTERFACE - 表示
interface
修飾符的int
值。 - static int NATIVE - 表示
abstract
修飾符的int
值。 - static int PRIVATE - 表示
private
修飾符的int
值。 - static int PROTECTED - 表示
protected
修飾符的int
值。 - static int PUBLIC - 表示
public
修飾符的int
值。 - static int STATIC - 表示
static
修飾符的int
值。 - static int STRICT - 表示
strictfp
修飾符的int
值。 - static int SYNCHRONIZED - 表示
synchronized
修飾符的int
值。 - static int TRANSIENT - 表示
transient
修飾符的int
值。 - static int VOLATILE - 表示
volatile
修飾符的int
值。
構造函數
序號 | 方法 | 描述 |
---|---|---|
1 | Modifier() | 默認構造函數 |
類方法
序號 | 方法 | 描述 |
---|---|---|
1 | static int classModifiers() | 返回一個int 值將可以應用於一個類的源語言修飾符組合在一起。 |
2 | static int constructorModifiers() | 返回一個int 值將可以應用於構造函數的源語言修飾符組合在一起。 |
3 | static int fieldModifiers() | 返回一個int 值將可以應用於字段的源語言修飾符組合在一起。 |
4 | static int interfaceModifiers() | 返回一個int 值將可以應用於interface 的源語言修飾符組合在一起。 |
5 | static boolean isAbstract(int mod) | 如果整數參數包含abstract 修飾符,返回true ,否則返回false 。 |
6 | static boolean isFinal(int mod) | 如果整數參數包含final 修飾符,則返回true ,否則返回false 。 |
7 | static boolean isInterface(int mod) | 如果整數參數包含interface 修飾符,返回true ,否則返回false 。 |
8 | static boolean isNative(int mod) | 如果整數參數包含native 修飾符,則返回true ,否則返回false 。 |
9 | static boolean isPrivate(int mod) | 如果整數參數包含private 修飾符,返回true ,否則返回false 。 |
10 | static boolean isProtected(int mod) | 如果整數參數包含protected 修飾符,則返回true ,否則返回false 。 |
11 | static boolean isPublic(int mod) | 如果整數參數包含public 修飾符,則返回true ,否則返回false 。 |
12 | static boolean isStatic(int mod) | 如果整數參數包含static 修飾符,則返回true ,否則返回false 。 |
13 | static boolean isStrict(int mod) | 如果整數參數包含strictfp 修飾符,則返回true ,否則返回false 。 |
14 | static boolean isSynchronized(int mod) | 如果整數參數包含synchronized 修飾符,返回true ,否則返回false 。 |
15 | static boolean isTransient(int mod) | 如果整數參數包含transient 修飾符,則返回true ,否則返回false 。 |
16 | static boolean isVolatile(int mod) | 如果整數參數包含volatile 修飾符,則返回true ,否則返回false 。 |
17 | static int methodModifiers() | 返回一個將可以應用於方法的源語言修飾符組合在一起的int 值。 |
18 | static String toString(int mod) | 返回描述指定修飾符中的訪問修飾符標誌的字符串。 |
方法繼承
此類繼承以下類的方法 -
- java.lang.Object
八、java.lang.reflect.Proxy類
java.lang.reflect.Proxy類提供用於創建動態代理類和實例的靜態方法,它也是由這些方法創建的所有動態代理類的超類。
類聲明
以下是java.lang.reflect.Proxy
類的聲明 -
public class Proxy
extends Object
implements Serializable
Java
字段
以下是java.lang.reflect.Proxy
類的字段 -
- protected InvocationHandler h - 該代理實例調用的處理程序。
構造函數
序號 | 方法 | 描述 |
---|---|---|
1 | protected Proxy(InvocationHandler h) | 從一個子類(通常是一個動態代理類)構造一個新的Proxy 實例,並為其調用處理程序指定一個值。 |
類方法
序號 | 方法 | 描述 |
---|---|---|
1 | static InvocationHandler getInvocationHandler(Object proxy) | 返回指定代理實例的調用處理程序。 |
2 | static Class<?> getProxyClass(ClassLoader loader, Class<?>… interfaces) | 給定類加載器和接口數組的代理類的java.lang.Class 對象。 |
3 | static boolean isProxyClass(Class<?> cl) | 當且僅當使用getProxyClass 方法或newProxyInstance 方法將指定的類動態生成為代理類時,才返回true 。 |
4 | static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) | 返回指定接口的代理類的實例,該接口將方法調用分派給指定的調用處理程序。 |
方法繼承
此類繼承以下類的方法 -
- java.lang.Object
總結:截止目前,java反射學習到此告一段落,本文參考JDK文檔編寫。
JAVA中反射機制六(java.lang.reflect包)