關於java的Cliass類

Class 類是在Java語言中 定義一個特定類的實現。一個類的定義包含成員變量,成員方法,還有這個類實現的接口,以及這個類的父類。Class類的對象用於表示當前運行的 Java 應用程序中的類和接口。 比如:每個數組均屬於一個 Class 類對象,所有具有相同元素類型和維數的數組共享一個Class 對象。基本的 Java 類型(boolean, byte, char, short, int, long, float 和 double) 和 void 類型也可表示爲 Class 對象。


以下示例使用 Class 對象顯示一個對象的 Class 名: 
         void printClassName(Object obj) { 
            System.out.println("The class of " + obj + 
                               " is " + obj.getClass().getName()); 
        }


        我們都知道所有的java類都是繼承了object這個類,在object這個類中有一個方法:getclass().這個方法是用來取得該類已經被實例化了的對象的該類的引用,這個引用指向的是Class類的對象(呵呵,有點彆扭)。我們自己無法生成一個Class對象(構造函數爲private),而 這個Class類的對象是在當各類被調入時,由 Java 虛擬機自動創建 Class 對象,或通過類裝載器中的 defineClass 方法生成。我們生成的對象都會有個字段記錄該對象所屬類在CLass類的對象的所在位置。如下圖所示:

 

             Class類
       我們可以把每個Class類的對象當做衆多類的代理。而且在每個Class類對象中有會有字段記錄他引用的這個類的類加載器。如果該字段爲null,表示該類的加載器爲bootstrap loader.具體原因見:對於類加載器的認識一文。

 

 

我們知道java中有多個加載器,每個加載器能載入多個類,所以只要取得Class類對象,就可利用其getClassLoader()方法取得該類加載器的引用。

      jvm爲每種類管理者獨一的Class對象。因此我們可以用雙等號操作符來比較對象:a1.getClass()==A.class;應該返回的是true。  
          class類和加載器
    forName(String classname)和 forName(String classname,boolean initialze,ClassLoader loader)   方法 
      該方法返回給定串名相應的de>Classde> 對象。若給定一個類或接口的完整路徑名,那麼此方法將試圖定位、裝載和連接該類。若成功,返回該類對象。否則,拋出 ClassNotFoundException 異常。 例如,下面代碼段返回名爲de>java.lang.Threadde> 的運行 de>Classde> 描述器。de>Class t = Class.forName("java.lang.Thread") ; 此方法是需要指定類加載器的,當用到僅有一個String參數的 forName方法時,Class對象將默認調用當前類加載器作爲加載器和將第二參數爲 true。第二個參數說明:如果是false時,調用forName方法只是在命令類加載器載入該類,而不初始化該類的靜態區塊,只有當該類第一次實例化 時,靜態區塊才被調用。當爲true時,則載入時就調用靜態區塊。 de> 
getClassLoader() 
獲取該類的類裝載器。 
getComponentType() 
如果當前類表示一個數組,則返回表示該數組組件的 Class 對象,否則返回 null。 
getConstructor(Class[]) 
返回當前 Class 對象表示的類的指定的公有構造子對象。 
getConstructors() 
返回當前 Class 對象表示的類的所有公有構造子對象數組。 
getDeclaredConstructor(Class[]) 
返回當前 Class 對象表示的類的指定已說明的一個構造子對象。 
getDeclaredConstructors() 
返回當前 Class 對象表示的類的所有已說明的構造子對象數組。 
getDeclaredField(String) 
返回當前 Class 對象表示的類或接口的指定已說明的一個域對象。 
getDeclaredFields() 
返回當前 Class 對象表示的類或接口的所有已說明的域對象數組。 
getDeclaredMethod(String, Class[]) 
返回當前 Class 對象表示的類或接口的指定已說明的一個方法對象。 
getDeclaredMethods() 
返回 Class 對象表示的類或接口的所有已說明的方法數組。 
getField(String) 
返回當前 Class 對象表示的類或接口的指定的公有成員域對象。 
getFields() 
返回當前 Class 對象表示的類或接口的所有可訪問的公有域對象數組。 
getInterfaces() 
返回當前對象表示的類或接口實現的接口。 
getMethod(String, Class[]) 
返回當前 Class 對象表示的類或接口的指定的公有成員方法對象。 
getMethods() 
返回當前 Class 對象表示的類或接口的所有公有成員方法對象數組,包括已聲明的和從父類繼承的方法。 
getModifiers() 
返回該類或接口的 Java 語言修改器代碼。 
getName() 
返回 Class 對象表示的類型(類、接口、數組或基類型)的完整路徑名字符串。 
getResource(String) 
按指定名查找資源。 
getResourceAsStream(String) 
用給定名查找資源。 
getSigners() 
獲取類標記。 
getSuperclass() 
如果此對象表示除 Object 外的任一類, 那麼返回此對象的父類對象。 
isArray() 
如果 Class 對象表示一個數組則返回 true, 否則返回 false。 
isAssignableFrom(Class) 
判定 Class 對象表示的類或接口是否同參數指定的 Class 表示的類或接口相同,或是其父類。 
isInstance(Object) 
此方法是 Java 語言 instanceof 操作的動態等價方法。 
isInterface() 
判定指定的 Class 對象是否表示一個接口類型。 
isPrimitive() 
判定指定的 Class 對象是否表示一個 Java 的基類型。 
newInstance() 
創建類的新實例。 
toString() 
將對象轉換爲字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章