真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java繼承中會不會自動創(chuàng)建父類對象

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

成都創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為興國企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),興國網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

1.

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

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

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

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

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

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

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

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

java繼承中會不會自動創(chuàng)建父類對象

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

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

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

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

2.

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

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

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

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

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

規(guī)則1:任何對象都是8個字節(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)父類中最后一個成員和子類第一個成員的間隔如果不夠4個字節(jié)的話,就必須擴(kuò)展到4個字節(jié)的基本單位。

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

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

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

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

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

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

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

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

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

上述內(nèi)容就是java繼承中會不會自動創(chuàng)建父類對象,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:java繼承中會不會自動創(chuàng)建父類對象
鏈接URL:http://weahome.cn/article/jijsdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部