1. 程式人生 > >JAVA中反射機制六(java.lang.reflect包)

JAVA中反射機制六(java.lang.reflect包)

instance 檢查 item 類繼承 final win 基類 cte member

一、簡介

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允許在getset操作期間擴展轉換,但如果發生縮小轉換,則會拋出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包)