Reflection & ClassLoader
每一個被加載至 JVM 的類別, 都以 java.lang.Class 的實例(Instance)存活於其中!
(下列內容大多參考由 WisdomFish, Kuo 所反製的 Java SE 6 正體中文文檔.)
JVM 動態加載機制
java.lang.Class 的實例由 JVM 自動產生.
java.lang
類別 Class<T>
java.lang.Object java.lang.Class<T>
- 型別參數:
T - 由此 Class
物件建模的類別的型別。例如,String.class 的型別是 Class<String> 。
如果將被建模的類別未知,則使用 Class<?> 。
- 所有已實作的介面:
- Serializable, AnnotatedElement, GenericDeclaration, Type
public final class Class<T> - extends Object
- implements Serializable, GenericDeclaration, Type, AnnotatedElement
Class 類別的實例(Instance), 表示正在運行的 Java
應用程序中的類別和介面。其包含列舉(Enum)是一種類別,註釋(Annotation)是一種介面。每個陣列[array]屬於被映射為 Class
物件的一個類別,所有具有相同元素型別和維數的陣列都共享該 Class 物件。基本的 Java 型別(boolean 、byte 、char 、short 、int 、long 、float
和 double )和關鍵字 void 也表示為 Class
物件。
Class 沒有公共建構子。Class 物件是在載入類別時由 Java
虛擬機器以及通過調用類別載入器中的 defineClass 方法自動建構的。
以下範例使用 Class 物件來顯示物件的類別名:
void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); }
還可以使用一個類別文字值(JLS Section 15.8.2)
來獲取指定型別(或 void)的 Class 物件。例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
- 從以下版本開始:
- JDK1.0
- 另請參見:
ClassLoader.defineClass(byte[],
int, int) ,
序
列化表格
|
|