T - 由此 Class 對象建模的類的類型。例如,String.class 的類型是Class<String>。如果將被建模的類未知,則使用Class<?>。
- public final
- class Class<T> extends Object implements java.io.Serializable,
- java.lang.reflect.GenericDeclaration,
- java.lang.reflect.Type,
- java.lang.reflect.AnnotatedElement
- 運用.class的方式來獲取Class實例。對於基本數據類型的封裝類,還可以采用.TYPE來獲取相對應的基本數據類型的Class實例。例如,Integer.TYPE 與 int.class是等效的,都是int。
- 利用對象調用getClass()方法獲取該對象的Class實例;
public class Test { public static void main(String[] args) { System.out.println("第一種實例化:"); System.out.println(int.class); System.out.println(Integer.TYPE); System.out.println("第二種實例化:"); Test test = new Test(); System.out.println(test.getClass().getName()); System.out.println(test.getClass().getSimpleName()); } }
- 使用Class類的靜態方法forName(),用類的名字獲取一個Class實例(static Class forName(String className) ),這種方式靈活性最高,根據類的字符串全名即可獲取Class實例,可以動態加載類,框架設計經常用到;
Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的defineClass方法自動構造的,因此不能顯式地聲明一個Class對象。
虛擬機為每種類型管理一個獨一無二的Class對象。也就是說,每個類(型)都有一個Class對象。運行程序時,Java虛擬機(JVM)首先檢查是否所要加載的類對應的Class對象是否已經加載。如果沒有加載,JVM就會根據類名查找.class文件,並將其Class對象載入。
基本的 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也都對應一個 Class 對象。
每個數組屬於被映射為 Class 對象的一個類,所有具有相同元素類型和維數的數組都共享該 Class 對象。
一般某個類的Class對象被載入內存,它就用來創建這個類的所有對象。
主要方法:
newInstance
public T newInstance() throws InstantiationException, IllegalAccessException
創建此
Class 對象所表示的類的一個新實例。如同用一個帶有一個空參數列表的
new 表達式實例化該類。
拋出:
IllegalAccessException - 如果該類或其 無參 構造方法是不可訪問的。
InstantiationException - 如果此
Class 表示一個抽象類、接口、數組類、基本類型或 void; 或者該類沒有無參構造方法。
