class 類是在java語言中定義一個特定類的實現。一個類的定義包含成員變量,成員方法,還有這個類實現的接口,以及這個類的父類。class類的對象用于表示當前運行的 java 應用程序中的類和接口。 比如:每個數組均屬于一個 class 類對象,所有具有相同元素類型和維數的數組共享一個class 對象?;镜?java 類型(boolean, byte, char, short,int, long, float 和 double) 和 void 類型也可表示為 class 對象。
以下示例使用 class 對象顯示一個對象的 class 名:
1
2
|
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類對象中有會有字段記錄他引用的這個類的類加載器。如果該字段為null,表示該類的加載器為bootstrap loader.具體原因見我之前分享過的一篇“《classloader工作機制 》”一文。
我們知道java中有多個加載器,每個加載器能載入多個類,所以只要取得class類對象,就可利用其getclassloader()方法取得該類加載器的引用。
jvm為每種類管理者獨一的class對象。因此我們可以用雙等號操作符來比較對象:a1.getclass()==a.class;應該返回的是true。
forname(string classname)和 forname(stringclassname,{*}boolean initialze,*classloader *loader)*方法。
該方法返回給定串名相應的class對象。若給定一個類或接口的完整路徑名,那么此方法將試圖定位、裝載和連接該類。若成功,返回該類對象。否則,拋出classnotfoundexception異常。例如,下面代碼段返回名為java.lang.thread的運行class描述器。classt=class.forname("java.lang.thread");此方法是需要指定類加載器的,當用到僅有一個string參數的forname方法時,class對象將默認調用當前類加載器作為加載器和將第二參數為true。第二個參數說明:如果是false時,調用forname方法只是在命令類加載器載入該類,而不初始化該類的靜態區塊,只有當該類第一次實例化時,靜態區塊才被調用。當為true時,則載入時就調用靜態區塊。
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()
將對象轉換為字符串。
總結
以上就是本文關于淺談java中的class類的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://www.cnblogs.com/yepei/p/5649276.html