java有兩個獲得類名的方法getClass()和class(),這兩個方法看似一樣,實則不然。這兩個方法涉及到了java中的反射。
所謂反射,可以理解為在運行時期獲取對象類型信息的操作。傳統(tǒng)的編程方法要求程序員在編譯階段決定使用的類型,但是在反射的幫助下,編程人員可以動態(tài)獲取這些信息,從而編寫更加具有可移植性的代碼。嚴格地說,反射并非編程語言的特性,因為在任何一種語言都可以實現(xiàn)反射機制,但是如果編程語言本身支持反射,那么反射的實現(xiàn)就會方便很多。
類型類
要知道類型信息在運行時是如何表示的,這是由Class對象來完成的,它包含了與類有關(guān)的信息。Class對象就是用來創(chuàng)建所有“常規(guī)”對象的,Java使用Class對象來執(zhí)行RTTI,即使你正在執(zhí)行的是類似類型轉(zhuǎn)換這樣的操作。
每個類都會產(chǎn)生一個對應(yīng)的Class對象,也就是保存在.class文件。所有類都是在對其第一次使用時,動態(tài)加載到JVM的,當(dāng)程序創(chuàng)建一個對類的靜態(tài)成員的引用時,就會加載這個類。Class對象僅在需要的時候才會加載,static初始化是在類加載時進行的。
我們知道在Java中一切都是對象,我們一般所使用的對象都直接或間接繼承自O(shè)bject類。Object類中包含一個方法名叫g(shù)etClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實例。
聯(lián)系
一般情況下,getclass()方法和class()方法是等價的,都可以獲得一個類型名,例如下面的代碼:
class A{ public void func(){ } } public class Test { public static void main(String[] args) { A a = new A(); System.out.println(a.getClass()+" "+A.class); } }
文章標(biāo)題:JAVA反射機制中g(shù)etClass和class對比分析-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://chinadenli.net/article46/cepohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、品牌網(wǎng)站設(shè)計、營銷型網(wǎng)站建設(shè)、定制網(wǎng)站、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)