1. 程式人生 > >Java反射 獲取Class及Class對應資訊

Java反射 獲取Class及Class對應資訊

一.獲取Class的三種方式

  1. Class.forName(String clazzName) 必須指定全限定類名(com.xxx.xxx.Xxx) 

  2. 呼叫某個類的class屬性獲取Class物件  Object.class

  3. 呼叫某個物件的getClass()方法  obj.getClass()

二.從Class中獲取資訊

1.獲取構造器(Constructor)
getConstructor(Class<?>...parameterTypes)返回 public 指定形參的 Constructor
getConstructors()  返回 public 所有的Constructor
getDeclaredConstructor(Class<?>...parameterTypes) 返回 任何訪問許可權 指定形參的 Constructor
getDeclaredConstructors();  返回 所有 任何訪問許可權的Constructor

2.獲取方法(Method)
getMethod(String name,Class<?>...parameterTypes) 返回 public 指定名字、形參的 Method
getMethods() 返回 public 所有Method
getDeclaredMethod(String name,Class<?>...parameterTypes) 返回 任何訪問許可權 指定名字、形參Method
getDeclaredMethods(); 返回 任何訪問許可權 所有Method

3.獲取成員變數(Field)
getField(String name)  返回 public 指定名字的 Field
getFields()  返回 public 所有Field
getDeclareField(String name)  返回 任何訪問許可權 指定名字 Field
getDeclareFields()  返回 任何訪問許可權 所有 Field

4.獲取Class上的註解(Annotation)
getAnnotation(Class<A> annotationClass) 獲取修飾該Class類的 指定型別的 Annotation
getDeclaredAnnotation(Class<A> annotationClass) 獲取 修飾該Class類的、指定型別的Annotation   /... jdk1.8新增.../
getAnnotations()   返回該修飾該Class類的所有Annotation
getDeclaredAnnotations() 返回 修飾該Class類的 所有Annotation

5.獲取Class相關的內部類、外部類、介面類、父類
getDeclaredClasses()   返回該Class類中 所有 內部類
getDeclaringClass()  返回該Class類中 所在的 外部類(如果該類是個內部類的話)
getInterfaces()     返回該Class類 所有的 已實現的介面
getSuperclass()    返回該Class類的 父類

6.其他資訊
Package getPackage() 獲取此類的包
String getName 返回該類的名稱 (全限定名 : com.xxx.xxx.Xxx)
String getSimpleName()返回該類的簡稱  (單類名 : Xxx)

7.判斷方法 (返回boolean)
  isAnnotation()  該類是否為註解型別 (@interface定義)
  isAnnotationPresent(Class<? extends Annotation> annotationClass) 該類中是否使用過(某個指定)註解
  isAnonymousClass()  該類是否是一個匿名類
  isEnum() 該類是否是一個列舉類
  isInterface() 該類是否是一個介面