亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年11月16日 15:08:50   作者:zhouyy40308  
這篇文章主要介紹了JAVA反射機制中getClass和class對比分析,具有一定參考價值,需要的朋友可以了解下。

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

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

類型類

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

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

我們知道在Java中一切都是對象,我們一般所使用的對象都直接或間接繼承自Object類。Object類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在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);
	}
}

輸出的結果為:classAclassA

區(qū)別:

兩者最直接的區(qū)別就是,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來看,當出現(xiàn)繼承和多態(tài)時,getclass和class方法的確實有所不同,因為是在運行時確定的,所以結果是ab在運行到這一時刻是所屬的類型。

總結

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

Java反射之Call stack introspection詳解

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

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

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

相關文章

  • SpringBoot重啟后,第一次請求接口請求慢的問題及解決

    SpringBoot重啟后,第一次請求接口請求慢的問題及解決

    這篇文章主要介紹了SpringBoot重啟后,第一次請求接口請求慢的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java遠程調用Shell腳本并獲取輸出信息【推薦】

    Java遠程調用Shell腳本并獲取輸出信息【推薦】

    這篇文章主要介紹了Java遠程調用Shell腳本并獲取輸出信息,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Java使用Scala實現(xiàn)尾遞歸優(yōu)化來解決爆棧問題

    Java使用Scala實現(xiàn)尾遞歸優(yōu)化來解決爆棧問題

    Scala?作為一種多范式的編程語言,結合了面向對象和函數式編程的特性,在?Scala?中,尾遞歸?是通過編譯器優(yōu)化來防止棧溢出問題的,尾遞歸優(yōu)化是一種特殊的優(yōu)化方式,可以讓遞歸調用不使用新的棧幀,所以本文介紹了在Java項目中如何使用Scala實現(xiàn)尾遞歸優(yōu)化來解決爆棧問題
    2024-10-10
  • JavaWeb實現(xiàn)文件上傳與下載的方法

    JavaWeb實現(xiàn)文件上傳與下載的方法

    這篇文章主要介紹了JavaWeb實現(xiàn)文件上傳與下載的方法的相關資料,需要的朋友可以參考下
    2016-01-01
  • 詳解Java中常見語法糖的使用

    詳解Java中常見語法糖的使用

    語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家 Peter.J.Landin 發(fā)明的一個術語,指在計算機語言中添加的某種語法,本文主要為大家分享了12個java中常見的語法糖,感興趣的小伙伴可以了解下
    2023-11-11
  • Java加載JDBC驅動程序實例詳解

    Java加載JDBC驅動程序實例詳解

    這篇文章主要介紹了Java加載JDBC驅動程序的方法,需要的朋友可以參考下
    2014-07-07
  • spring中向一個單例bean中注入非單例bean的方法詳解

    spring中向一個單例bean中注入非單例bean的方法詳解

    Spring是先將Bean對象實例化之后,再設置對象屬性,所以會先調用他的無參構造函數實例化,每個對象存在一個map中,當遇到依賴,就去map中調用對應的單例對象,這篇文章主要給大家介紹了關于spring中向一個單例bean中注入非單例bean的相關資料,需要的朋友可以參考下
    2021-07-07
  • MyBatis中的連接池及事物控制配置過程

    MyBatis中的連接池及事物控制配置過程

    連接池就是用于存儲數據庫連接的一個容器,容器其實就是一個集合對象,本文給大家介紹MyBatis中的連接池以及事物控制的相關知識,感興趣的朋友一起看看吧
    2021-05-05
  • java簡單工廠模式入門

    java簡單工廠模式入門

    下面小編就為大家?guī)硪黄猨ava工廠模式入門文章。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • java多線程模擬搶紅包功能

    java多線程模擬搶紅包功能

    這篇文章主要為大家詳細介紹了java多線程模擬搶紅包功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論