最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談java繼承中是否創(chuàng)建父類對象

 更新時(shí)間:2017年06月20日 09:55:14   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談java繼承中是否創(chuàng)建父類對象。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1.

調(diào)用父類構(gòu)造方法是真的,但是根本沒有創(chuàng)建父類對象,只不過是調(diào)用父類構(gòu)造方法來初始化屬性。

如果說調(diào)用父類構(gòu)造方法就等于創(chuàng)建父類對象,那就真的無稽之談。

new指令開辟空間,用于存放對象的各個(gè)屬/性引用等,反編譯字節(jié)碼你會(huì)發(fā)現(xiàn)只有一個(gè)new指令,所以開辟的是一塊空間,一塊空間就放一個(gè)對象。

然后,子類調(diào)用父類的屬性,方法啥的,那并不是一個(gè)實(shí)例化的對象。

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

你的方法啊,屬性名稱都是在這個(gè)上面解析出來的,然后實(shí)際變量內(nèi)容存儲(chǔ)在new出來的空間那里。。。

super這個(gè)關(guān)鍵字只不過是訪問了這個(gè)空間特定部分的數(shù)據(jù)(也就是專門存儲(chǔ)父類數(shù)據(jù)的內(nèi)存部分)。。。。。。

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

如果說子類可以強(qiáng)行轉(zhuǎn)換成父類進(jìn)行使用,那是因?yàn)閖ava虛擬機(jī)有個(gè)靜態(tài)類型(外觀類型)和實(shí)際類型的概念。

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

那么Object屬于靜態(tài)類型(外觀類型),Point屬于實(shí)際類型。

靜態(tài)類型和實(shí)際類型在程序中都可以發(fā)生變化,區(qū)別是靜態(tài)類型的變化僅僅發(fā)生在使用時(shí)發(fā)生,而變量本身的靜態(tài)類型不會(huì)改變,并且最終的靜態(tài)類型是在編譯期間可知的;而實(shí)際變量類型的變化結(jié)果只有在運(yùn)行期間才能被確定,編譯器在編譯的時(shí)候并不知道變量的實(shí)際類型是什么。

2.

java對象的內(nèi)存布局是由對象所屬的類確定。也可以這么說,當(dāng)一個(gè)類被加載到虛擬機(jī)中時(shí),由這個(gè)類創(chuàng)建的對象的布局就已經(jīng)確定下來的啦。

Hotspot中java對象的內(nèi)存布局:

每個(gè)java對象在內(nèi)存中都由對象頭和對象體組成。

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

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

規(guī)則1:任何對象都是8個(gè)字節(jié)為粒度進(jìn)行對齊的。

規(guī)則2:實(shí)例域按照如下優(yōu)先級進(jìn)行排列:長整型和雙精度類型;整型和浮點(diǎn)型;字符和短整型;字節(jié)類型和布爾類型,最后是引用類型。這些實(shí)例域都按照各自的單位對齊。

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

規(guī)則4:當(dāng)父類中最后一個(gè)成員和子類第一個(gè)成員的間隔如果不夠4個(gè)字節(jié)的話,就必須擴(kuò)展到4個(gè)字節(jié)的基本單位。

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

以上就是java對象的內(nèi)存布局的規(guī)則。

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

當(dāng)我們new一個(gè)對象時(shí),其實(shí)jvm已經(jīng)把這個(gè)對象的整個(gè)空間已經(jīng)分配好,并且整個(gè)對象的實(shí)例域布局已經(jīng)確定下來啦。

實(shí)例化方法<init>就是將對象實(shí)例域的值設(shè)置到相應(yīng)空間中。

<init>方法以調(diào)用父類的<init>方法開始,以自身構(gòu)造方法作為結(jié)束。實(shí)例域的聲明與實(shí)例初始化語句塊的位置關(guān)系會(huì)影響編譯器生成的<init>方法的字節(jié)碼順序。

還是以一個(gè)例子說明一下:

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

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

 

當(dāng)前Sub對象的內(nèi)存布局由下:

super所謂的父類存儲(chǔ)空間的表示到底是什么意思?

這里的super存儲(chǔ)我想就是綠色的那個(gè)位置吧!

以上這篇淺談java繼承中是否創(chuàng)建父類對象就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis判斷int是否為空的時(shí)候,需要注意的3點(diǎn)

    mybatis判斷int是否為空的時(shí)候,需要注意的3點(diǎn)

    這篇文章主要介紹了mybatis判斷int是否為空的時(shí)候,需要注意的3點(diǎn),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解決IDEA創(chuàng)建SpringBoot項(xiàng)目沒有Java版本8問題

    解決IDEA創(chuàng)建SpringBoot項(xiàng)目沒有Java版本8問題

    這篇文章主要介紹了解決IDEA創(chuàng)建SpringBoot項(xiàng)目沒有Java版本8問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot @Retryable注解使用

    SpringBoot @Retryable注解使用

    SpringBoot提供的@Retryable注解可以方便地實(shí)現(xiàn)方法的重試機(jī)制,可以在不侵入原有邏輯代碼的方式下,優(yōu)雅地實(shí)現(xiàn)重處理功能
    2024-12-12
  • 淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行

    淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行

    下面小編就為大家?guī)硪黄獪\談js文件引用方式及其同步執(zhí)行與異步執(zhí)行。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • Java并發(fā)程序刺客之假共享的原理及復(fù)現(xiàn)

    Java并發(fā)程序刺客之假共享的原理及復(fù)現(xiàn)

    前段時(shí)間在各種社交平臺“雪糕刺客”這個(gè)詞比較火,而在并發(fā)程序中也有一個(gè)刺客,那就是假共享。本文將通過示例詳細(xì)講解假共享的原理及復(fù)現(xiàn),需要的可以參考一下
    2022-08-08
  • Java中IO流簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中IO流簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java io系統(tǒng)的設(shè)計(jì)初衷,就是為了實(shí)現(xiàn)“文件、控制臺、網(wǎng)絡(luò)設(shè)備”這些io設(shè)置的通信。接下來通過本文給大家介紹Java中IO流簡介,感興趣的朋友一起看看吧
    2017-05-05
  • Java命令行下Jar包打包小結(jié)

    Java命令行下Jar包打包小結(jié)

    這篇文章主要介紹了Java命令行下Jar包打包小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Spring Boot 整合 MyBatis 連接數(shù)據(jù)庫及常見問題

    Spring Boot 整合 MyBatis 連接數(shù)據(jù)庫及常見問題

    MyBatis 是一個(gè)優(yōu)秀的持久層框架,支持定制化 SQL、存儲(chǔ)過程以及高級映射,下面詳細(xì)介紹如何在 Spring Boot 項(xiàng)目中整合 MyBatis 并連接數(shù)據(jù)庫,感興趣的朋友一起看看吧
    2025-03-03
  • Spring MVC使用jstl 標(biāo)簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式

    Spring MVC使用jstl 標(biāo)簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式

    這篇文章主要介紹了Spring MVC使用jstl 標(biāo)簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring中propagation的傳播機(jī)制詳解

    Spring中propagation的傳播機(jī)制詳解

    這篇文章主要介紹了Spring中propagation的傳播機(jī)制詳解,要搞懂事務(wù)的傳播機(jī)制,那么就要明白邏輯事務(wù)中各個(gè)事務(wù)的關(guān)系,才能徹底理解事務(wù)傳播特性,在Spring事務(wù)中,各個(gè)邏輯事務(wù)的關(guān)系可以是并列、覆蓋或包含,需要的朋友可以參考下
    2023-12-12

最新評論

闽侯县| 高青县| 淄博市| 东丽区| 崇礼县| 繁峙县| 湘乡市| 台北市| 衢州市| 内丘县| 江油市| 霍林郭勒市| 孝昌县| 金堂县| 乌海市| 新宾| 公主岭市| 松阳县| 建昌县| 桃园市| 沧源| 志丹县| 化隆| 府谷县| 新乐市| 长沙县| 海盐县| 玉林市| 吴川市| 仁化县| 吴忠市| 噶尔县| 天津市| 万山特区| 离岛区| 伽师县| 江华| 平邑县| 高平市| 柞水县| 西峡县|