1. 程式人生 > >Java Class物件簡介

Java Class物件簡介

何為Class物件?

ClassJava中的一個類:java.lang.Class

Class類的每個物件對應於Java應用程式中執行的每個類或介面。

換言之,Java中的每個類或介面都有它的一個Class物件,儲存著關於類的一些資訊。

顯然,Class物件是跟類 進行mapping的,同一個類的每一個物件擁有相同的Class物件。

此外,不僅是對於類,那些Java中的基本資料型別也有對應的Class物件。

如何獲取某個類的Class物件?

(假使我們有一個類com.test.MyClass,來獲取這個類的Class物件)

常見的獲取方式有三種:

1.如果我們已經擁有了該類的一個例項(

物件)obj1 ,我們直接可以通過它獲取。

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()

得到該類的一個例項化物件