獲取Class對象
- 使用Class類的forName(String clazzName)靜態方法。例如,Person.class將會返回Person類對應的Class對象。
- 調用某個類的class屬性來獲取該類對應的Class對象。例如,Person.class將會返回Person類對應的Class對象。
- 調用某個能夠的getClass()方法。該方法是java.lang.Object類中的一個方法,所以所有的JAVA對象都可以調用該方法,該方法將會返回該對象所屬類對應的Class對象。
對於第一種方式和第二種方式都是直接根據類來取得該類的Class對象,相比之下,第二種方式有如下兩種優勢。
- 代碼更安全。程序在編譯階段就可以檢查需要訪問的Class對象是否存在。
- 程序性能更好。因爲這種方式無須調用方法,所以性能更好。
也就是說,能使用第二種方式,就不使用第一種方法。
四、從Class中獲取信息
獲取Classc對應類所包含的構造器
序號 | 方法 | 說明 |
---|---|---|
1 | Constructor<T> getConstructor(Class<?>… parameterTypes) | 獲取指定public的構造器 |
2 | Constructor[]<T> getConstructors() | 獲取全部public的構造器 |
3 | Constructor<T> getDeclaredConstructor(Class<?>… parameterTypes) | 獲取指定的構造器 |
4 | Constructor[]<T> getDeclaredConstructors() | 獲取全部的構造器 |
獲取Classc對應類所包含的方法
序號 | 方法 | 說明 |
---|---|---|
1 | Method<T> getMethod(String name,Class<?>… parameterTypes) | 根據可變參數 獲取方法名爲name 獲取public的方法 |
2 | Method[]<T> getMethods() | 獲取所有public的方法 |
3 | Method<T> getDeclaredMethod(String name,Class<?>… parameterTypes) | 根據可變參數 獲取方法名爲name 獲取的方法 |
4 | Method[]<T> getDeclaredMethods() | 獲取所有的方法 |
獲取Classc對應類所包含的屬性(成員變量)
序號 | 方法 | 說明 |
---|---|---|
1 | Field<T> getField(String name) | 根據name獲取public的成員變量 |
2 | Field[]<T> getFields() | 獲取所有public的成員變量 |
3 | Field<T> getDeclaredField(String name) | 根據name獲取的成員變量 |
4 | Field[]<T> getDeclaredFields() | 獲取所有的成員變量 |
獲取Classc對應類所包含的註解
序號 | 方法 | 說明 |
---|---|---|
1 | Annotation<T> getAnnotation(Class annotationClass) | 根據annotationClass獲取public的註解 |
2 | Annotation[]<T> getAnnotations() | 獲取所有public的註解 |
3 | Annotation<T> getDeclaredAnnotation(Class annotationClass) | 根據annotationClass獲取的註解 |
4 | Annotation[]<T> getDeclaredAnnotations() | 獲取所有的註解 |
5 | <A extends Annotation> A[]<T> getAnnotationsByType(Class annotationClass) | 與getAnnotation相似,用於重複註解 |
6 | <A extends Annotation> A[]<T> getDeclaredAnnotationsByType(Class annotationClass) | 與getAnnotation相似,用於重複註解 |
獲取Classc對應類所包含的類
序號 | 方法 | 說明 |
---|---|---|
1 | Class<?>[] getDeclaredClasses() | 獲取該Class對象包含的全部內部類 |
2 | Class<?> getDeclaringClass() | 獲取外部類,也就是自身 |
3 | Class<? super T> getSuperclass() | 獲取超類(父類) |
4 | Class<?>[] getInterfaces() | 獲取該類實現的全部接口 |
獲取Classc對應類的基礎信息
序號 | 方法 | 說明 |
---|---|---|
1 | int getModifiers() | 獲取所有修飾符,需要用Modifier工具類進行解析 |
1 | Package getPackage() | 獲取包名 |
1 | int getSimpleName() | 獲取對象名稱(String) |
1 | boolean isAnnotation() | 判斷是否註解類型 |
1 | boolean isAnnotationPresent(Class<? extends Annotation> annotationsClass) | 判斷是否使用了註解進行修飾 |
1 | boolean isAnonymousClass() | 判斷是否是匿名類 |
1 | boolean isArray() | 判斷是否是數組類 |
1 | boolean isEnum() | 判斷是否是枚舉類 |
1 | boolean isInterface() | 判斷是否是接口 |
1 | boolean isInstance(Object o) | 判斷是否是指定類 |