在Java中,無論是類還是接口,它們在JVM的內存邏輯模型中都會存在Super和Class指針,分別指向根類(Object類)和反射類(Class類)
Object類 和 Class 類都位於 java.lang.
包中,使用時均無需導入
在Java的世界裏,一切皆是對象,所有的對象都是繼承於Object類,而記錄對象的類型的信息是由Class類來完成的
一、Object 類
Object類是每個類的始祖,Java中的任何一個類都是由Object類擴展而來,但不用寫class a extends Object
,無論是否指出,Object 都被認爲是此類的直接超類或間接超類。所以任何類都可以調用Object類中方法
Object類是一切 java 類的父類,對於普通的 java 類,即便不聲明,也是默認繼承了Object類。典型的,可以使用Object類中的 toString() 方法。
可以說Object 是所有類的父類,封裝了所有類的一些共性方法
二、Class 類
在Java中,每個 class 都有一個相應的 Class 對象。也就是說,當我們編寫一個類,編譯完成後,在生成的.class
文件中,就會產生一個 Class 對象,用於表示這個類的類型信息
Class類是描述類的信息的類,是不能由用戶程序實例化的,只能由 java 虛擬機實例化
Class類是用於 java 反射機制的,一切 java 類,都有一個對應的 Class 對象,他是一個final 類。Class 類的實例表示,正在運行的 Java 應用程序中的類和接口
每個類的運行時的類型信息就是用 Class 對象表示的,它包含了與類有關的信息,其實我們的實例對象就通過 Class 對象來創建的。Java使用Class對象執行其RTTI(運行時類型識別,Run-Time Type Identification),多態是基於RTTI實現的。
每一個類都有Class對象,基本類型 ( byte, char, short, int, long, float, double and boolean)有 Class 對象,數組有 Class 對象,就連關鍵字 void 也有 Class 對象(void.class
),Class對象對應着java.lang.Class
類,如果說類是對象抽象和集合的話,那麼Class類就是對類的抽象和集合
Class類沒有公共的構造方法,Class對象是在類加載的時候由Java虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的,因此不能顯式地聲明一個Class對象。
【參考】
[1] https://blog.csdn.net/coder_what/article/details/89501706
[2] https://blog.csdn.net/m0_37154839/article/details/79347832
[3] https://blog.csdn.net/u013277209/article/details/102767935?utm_source=distribute.pc_relevant.none-task