1.構造方法信息:包括public型和所有類型
2.成員變量信息:包括public型和所有類型(已繼承的和已定義的)
3.成員方法信息:包括public型和所有類型(已實現的和已定義的)
4.類信息: 包括內部類和其它對象成員
5.繼承實現信息:包括繼承或實現的類、接口(直接的和所有的)
Class類返回的對象一般有:Constructor,Filed,Method,Type,Class等,而Class類的某些get方法通常都需要指定參數類型,這些參數類型可以統一的通過:類名.class來獲得。
通常情況下,getXxx方法拿到的都是public類型的,而getDeclaredXxxx方法拿到的是所有類型的。有些方法會一直向上追溯直到根類,如果找不到對應的信息則拋出異常。
下面簡單列舉一下常用的API用法:
【1】獲取構造函數對象
A. getConstructor(Class... parameterTypes) :
返回Class對象所代表的類中某個指定參數類型的public構造方法
B. getConstructors()
返回Class對象所代表的類的所有public構造方法數組
C. getDeclaredConstructor(Class... parameterTypes)
返回Class對象所代表的類或接口中某個指定參數類型的構造方法(不限于public)
D. getDeclaredConstructors()
返回Class對象所代表的類中所有聲明的構造方法(不限于public)
【2】獲取成員變量對象
A. getField(String name)
返回Class對象所代表的類中某個public類型的成員變量
1.如果指定了名稱,則返回該指定名稱的成員變量
2.如果在Class中找不到該成員變量,則從Class的所有實現接口中逐個查找
3.如果在步驟1~2中都找不到該成員變量,則從Class的直接父類中查找
4.如果在步驟1~3中都找不到,則拋出一個NoSuchFieldException
B. getFields()
返回Class對象所代表的類或接口中所有public的成員變量或常量
1.該方法不單返回Class中定義的所有可訪問屬性,還包括繼承的所有可訪問屬性
2.如果該Class沒有任何可訪問屬性,則返回一個長度為0的數組
3.如果該Class代表了私有數據類型,數組,void數據類型對象,則返回一個長度為0的數組
C. getDeclaredField(String name)
返回Class對象所代表的類或接口中某個成員變量(不限于public)
D. getDeclaredFields()
返回Class對象所代表的類或接口中所有成員變量(不限于public)
【3】獲取成員方法對象
A. getMethod(String name, Class... parameterTypes)
返回Class對象所代表的類中某個指定名稱和參數類型的public成員方法
B. getMethods()
返回Class對象所代表的類或接口中所有的public成員方法,包括自有的和繼承的
C. getDeclaredMethod(String name, Class... parameterTypes)
返回Class對象所代表的類或接口中某個指定名稱和參數類型的成員方法(不限于public)
D. getDeclaredMethods()
返回Class對象所代表的類或接口中所有的成員方法,包括自有的基礎的(不限于public)
【4】獲取Class對象
A. getDeclaringClass()
假如Class對象所代表的類或接口,是另外一個類的成員,那么返回包含它的那個類
B. getEnclosingClass()
返回Class對象所包含的匿名內部類
C. getInterfaces()
返回Class對象所代表的類的所有實現的接口(不僅僅是直接的,還包括繼承的)
D. getClasses()
返回Class對象所代表的類的所有public成員類、接口
1.該方法不單返回Class中定義的所有公共成員類、接口,還包括繼承的類,接口
2.如果該Class不含有任何公共的成員類、接口,則返回一個長度為0的數組
3.如果該Class代表了私有類型數據,數組,void數據類型對象,則返回一個長度為0的數組
E. getSuperClass()
返回Class對象的直接父類
【5】獲取Type對象
A. getGenericInterfaces()
返回Class對象的直接實現/繼承的父接口
1.如果Class實例代表了一個類,則返回一個包含所有直接實現接口的Type數組
2.如果Class實例代表了一個接口,則返回一個包含所有直接繼承接口的Type數組
3.如果Class實例代表了一個似有類型或void類型,則返回一個長度為0的Type數組
4.如果Class實例沒有實現/繼承任何接口,則返回一個長度為0的Type數組
B. getGenericSuperclass()
返回Class對象所代表的類直接父類
1.如果Class實例代表了Object類實例、接口、私有類型數據,void類型,則返回null
2.如果Class實例代表了數組實例,則返回Object類型
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。