深入理解 Object 類和 Class 類

在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

發佈了587 篇原創文章 · 獲贊 267 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章