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

溫馨提示×

溫馨提示×

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

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

java繼承中會不會自動創建父類對象

發布時間:2020-11-24 16:09:14 來源:億速云 閱讀:294 作者:Leah 欄目:編程語言

本篇文章為大家展示了java繼承中會不會自動創建父類對象,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1.

調用父類構造方法是真的,但是根本沒有創建父類對象,只不過是調用父類構造方法來初始化屬性。

如果說調用父類構造方法就等于創建父類對象,那就真的無稽之談。

new指令開辟空間,用于存放對象的各個屬/性引用等,反編譯字節碼你會發現只有一個new指令,所以開辟的是一塊空間,一塊空間就放一個對象。

然后,子類調用父類的屬性,方法啥的,那并不是一個實例化的對象。

在字節碼中子類會有個u2類型的父類索引,屬于CONSTANT_Class_info類型,通過CONSTANT_Class_info的描述可以找到CONSTANT_Utf8_info,然后可以找到指定的父類啊啥的。

你的方法啊,屬性名稱都是在這個上面解析出來的,然后實際變量內容存儲在new出來的空間那里。。。

super這個關鍵字只不過是訪問了這個空間特定部分的數據(也就是專門存儲父類數據的內存部分)。。。。。。

默認的hashcode和equals(直接使用的==比較)都是一樣的,所以,這根本就在一個空間里,也不存在單獨的出來的父類對象。

java繼承中會不會自動創建父類對象

如果說子類可以強行轉換成父類進行使用,那是因為java虛擬機有個靜態類型(外觀類型)和實際類型的概念。

如Object t=new Point(2,3);

那么Object屬于靜態類型(外觀類型),Point屬于實際類型。

靜態類型和實際類型在程序中都可以發生變化,區別是靜態類型的變化僅僅發生在使用時發生,而變量本身的靜態類型不會改變,并且最終的靜態類型是在編譯期間可知的;而實際變量類型的變化結果只有在運行期間才能被確定,編譯器在編譯的時候并不知道變量的實際類型是什么。

2.

java對象的內存布局是由對象所屬的類確定。也可以這么說,當一個類被加載到虛擬機中時,由這個類創建的對象的布局就已經確定下來的啦。

Hotspot中java對象的內存布局:

每個java對象在內存中都由對象頭和對象體組成。

對象頭是存放對象的元信息,包括該對象所屬類對象Class的引用以及hashcode和monitor的一些信息。

對象體主要存放的是java對象自身的實例域以及從父類繼承過來的實例域,并且內部布局滿足由下規則:

規則1:任何對象都是8個字節為粒度進行對齊的。

規則2:實例域按照如下優先級進行排列:長整型和雙精度類型;整型和浮點型;字符和短整型;字節類型和布爾類型,最后是引用類型。這些實例域都按照各自的單位對齊。

規則3:不同類繼承關系中的實例域不能混合排列。首先按照規則2處理父類中的實例域,接著才是子類的實例域。

規則4:當父類中最后一個成員和子類第一個成員的間隔如果不夠4個字節的話,就必須擴展到4個字節的基本單位。

規則5:如果子類第一個實例域是一個雙精度或者長整型,并且父類并沒有用完8個字節,JVM會破壞規則2,按照整形(int),短整型(short),字節型(byte),引用類型(reference)的順序,向未填滿的空間填充。

以上就是java對象的內存布局的規則。

接下來說一下java對象的實例化方法,也就是常見的<init>方法。

當我們new一個對象時,其實jvm已經把這個對象的整個空間已經分配好,并且整個對象的實例域布局已經確定下來啦。

實例化方法<init>就是將對象實例域的值設置到相應空間中。

<init>方法以調用父類的<init>方法開始,以自身構造方法作為結束。實例域的聲明與實例初始化語句塊的位置關系會影響編譯器生成的<init>方法的字節碼順序。

還是以一個例子說明一下:

class Parent {
private short six;
private int age;
}

class Sub extend Parent{
private String name;
private int age;
private float price;
}

上述內容就是java繼承中會不會自動創建父類對象,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

托克托县| 大庆市| 乡城县| 出国| 寿阳县| 临潭县| 凤山县| 广灵县| 靖远县| 三台县| 闸北区| 镇原县| 沽源县| 泗阳县| 滁州市| 柳州市| 西安市| 横山县| 卓尼县| 富源县| 津市市| 英山县| 芜湖县| 凤城市| 岳普湖县| 洱源县| 洪雅县| 新蔡县| 六安市| 库尔勒市| 德保县| 德惠市| 伽师县| 延津县| 左云县| 云霄县| 龙州县| 军事| 桐城市| 台山市| 祁连县|