91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA反射機制中getClass和class對比分析

發布時間:2020-10-04 00:59:25 來源:腳本之家 閱讀:193 作者:zhouyy40308 欄目:編程語言

java有兩個獲得類名的方法getClass()和class(),這兩個方法看似一樣,實則不然。這兩個方法涉及到了java中的反射。

所謂反射,可以理解為在運行時期獲取對象類型信息的操作。傳統的編程方法要求程序員在編譯階段決定使用的類型,但是在反射的幫助下,編程人員可以動態獲取這些信息,從而編寫更加具有可移植性的代碼。嚴格地說,反射并非編程語言的特性,因為在任何一種語言都可以實現反射機制,但是如果編程語言本身支持反射,那么反射的實現就會方便很多。

類型類

要知道類型信息在運行時是如何表示的,這是由Class對象來完成的,它包含了與類有關的信息。Class對象就是用來創建所有“常規”對象的,Java使用Class對象來執行RTTI,即使你正在執行的是類似類型轉換這樣的操作。

每個類都會產生一個對應的Class對象,也就是保存在.class文件。所有類都是在對其第一次使用時,動態加載到JVM的,當程序創建一個對類的靜態成員的引用時,就會加載這個類。Class對象僅在需要的時候才會加載,static初始化是在類加載時進行的。

我們知道在Java中一切都是對象,我們一般所使用的對象都直接或間接繼承自Object類。Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實例。

聯系

一般情況下,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);
	}
}

輸出的結果為:classAclassA

區別:

兩者最直接的區別就是,getClass()是一個類的實例所具備的方法,而class()方法是一個類的方法。

另外getClass()是在運行時才確定的,而class()方法是在編譯時就確定了。

例如下面的程序:

class A{
	public void func(){
	}
}
class B extends A{
}
public class Test {
	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		A ab = new B();
		System.out.println(a.getClass()+" "+A.class);
		System.out.println(b.getClass()+" "+B.class);
		System.out.println(ab.getClass());
		ab = a;
		System.out.println(ab.getClass());
	}
}

結果:
class A class A
class B class B
class B
class A

從最后的結果為class B來看,當出現繼承和多態時,getclass和class方法的確實有所不同,因為是在運行時確定的,所以結果是ab在運行到這一時刻是所屬的類型。

總結

以上就是本文關于JAVA反射機制中getClass和class異同的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:

Java反射之Call stack introspection詳解

關于Java反射機制 你需要知道的事情

Java的RTTI和反射機制代碼分析

如有不足之處,歡迎留言指出。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

固镇县| 健康| 张家川| 安塞县| 电白县| 湘阴县| 靖西县| 北海市| 石台县| 长治县| 和平县| 航空| 鄄城县| 石林| 太和县| 天祝| 西藏| 南京市| 潮州市| 盐池县| 淮阳县| 荥经县| 鄯善县| 黔南| 丰台区| 绍兴县| 红安县| 长宁县| 柞水县| 马公市| 商洛市| 宣汉县| 云霄县| 宁海县| 东港市| 清苑县| 威宁| 德安县| 高邑县| 扶沟县| 土默特左旗|