Java Class物件簡介
何為Class物件?
Class是Java中的一個類:java.lang.Class
Class類的每個物件對應於Java應用程式中執行的每個類或介面。
換言之,Java中的每個類或介面都有它的一個Class物件,儲存著關於類的一些資訊。
顯然,Class物件是跟類 進行mapping的,同一個類的每一個物件擁有相同的Class物件。
此外,不僅是對於類,那些Java中的基本資料型別也有對應的Class物件。
如何獲取某個類的Class物件?
(假使我們有一個類com.test.MyClass,來獲取這個類的Class物件)
常見的獲取方式有三種:
1.如果我們已經擁有了該類的一個例項(
MyClassobj1= newMyClass();
Class<?>obj1Class= obj1.getClass();
這種方式的使用前提是:我們已經擁有了一個類的例項。
2.我們可以Class類的靜態方法forName()獲取。
forName()方法有幾種過載,其中一種是直接傳入要獲取類的全名即可。
Class<?>mainClass= Class.forName("com.test.MyClass");
3.我們還可以使用類字面常量進行獲取。
我們直接可以通過使用MyClass.class得到該類的一個Class
第二和第三種方式不僅是形式上的不同,另外一個重要的不同點是:
使用靜態方法forName()會對類進行初始化,而使用類字面常量.class則不會。
假使我們的類裡有一個static函式,在類進行初始化時它會被呼叫。
class MyClass {
static {
System.out.println("MyClass static fun");
}
}
我們使用兩種方式分別獲取MyClass類的Class物件.
Class<?> myClass1 = MyClass.class; System.out.println("seperate"); try { Class<?> myClass2 = Class.forName("com.hyl.MyClass"); } catch (ClassNotFoundException e1) { e1.printStackTrace(); }
output:
seperate
MyClassstatic fun
從輸出內容可以看出,使用forName靜態方法會對類進行初始化,而使用類字面常量則不會。
Class類的幾個重要方法
靜態方法Class.foName()
獲取類的Class物件.
ClassLoadergetClassLoader()
得到該類的類載入器
StringetSimpleName()
得到該類的簡稱
StringgetName()
得到該類的全名
StringgetCanonicalName()
得到該類的規範化全稱
Field[]getFields()
得到該類的所有可訪問欄位
Method[]getMethods()
得到該類的所有公共方法
TnewInstance()
得到該類的一個例項化物件