java.lang.Class
一、Class類是什么
Class是一個類,位於java.lang包下。
在Java中每個類都有一個相對應的Class類的對象,換句話說:Java程序在啟動運行時 一個XXX.java類經過編譯生成XXX.class文件后,就會在JVM虛擬機中產生一個XXX類對應的Class類的對象,用於表示這個XXX類的類型信息。
二、Class類常用的方法
Class類是反射中的核心類,它有如下的方法:
獲取類中的屬性:
- getFields(): 獲取類中public類型的屬性
- getField(String name): 獲取類特定的方法,name參數指定了屬性的名稱
- getDeclaredFields(): 獲取類中所有的屬性(public、protected、default、private),但不包括繼承的屬性。
- getDeclaredField(String name): 獲取類特定的方法,name參數指定了屬性的名稱
獲取類中的構造函數:
- getConstructors():獲取類中的公共方法
- getConstructor(Class[] params): 獲取類的特定構造方法,params參數指定構造方法的參數類型
- getDeclaredConstructors(): 獲取類中所有的構造方法(public、protected、default、private)
- getDeclaredConstructor(Class[] params): 獲取類的特定構造方法,params參數指定構造方法的參數類型
獲取類中的方法:
- getMethods(): 獲得類的public類型的方法
- getMethod(String name, Class[] params): 獲得類的特定方法,name參數指定方法的名字,params參數指定方法的參數類型
- getDeclaredMethods(): 獲取類中所有的方法(public、protected、default、private)
- getDeclaredMethod(String name, Class[] params): 獲得類的特定方法,name參數指定方法的名字,params參數指定方法的參數類型
其它重要方法:
- newInstance(): 通過類的不帶參數 的構造方法創建這個類的一個對象
- forName(String className): 獲取className參數指定的類的class對象
- forName(String className,boolean initialize,ClassLoader): 使用指定的類加載器獲取className參數指定的類的class對象
- getClassLoader(): 獲取類加載器
- getName(): 獲取類名
- getPackage(): 獲取類所在的包名
三、獲取Class對象的三種方法
第一種: 調用Class類的靜態方法forName,比如 Class.forName("java.lang.String")
第二種: 使用類的.class語法,比如 : Class cls = String.class
第三種: 調用對象的getClass方法, 比如:String str = "123"; Class cls = str.getClass();
(PS:在java.lang.Object類中定義了getClass()方法,因此對於任意一個Java對象,都可以通過此方法獲得對象的類型)