溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java對(duì)象怎么初始化

發(fā)布時(shí)間:2021-08-31 11:28:41 來源:億速云 閱讀:122 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“Java對(duì)象怎么初始化”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java對(duì)象怎么初始化”吧!

一、什么時(shí)候需要初始化一個(gè)類

  首次創(chuàng)建某個(gè)對(duì)象時(shí):

  Dogdog=newDog();

  首次訪問某個(gè)類的靜態(tài)方法或者靜態(tài)字段時(shí):

  Dog.staticFields;

  Java解釋器就會(huì)去找類的路徑,定位已經(jīng)編譯好的Dog.class文件。

二、獲得類的資源

  然后jvm就會(huì)載入Dog.class,生成一個(gè)class對(duì)象。這個(gè)時(shí)候如果有靜態(tài)的方法或者變量,靜態(tài)初始化動(dòng)作都會(huì)被執(zhí)行。這個(gè)時(shí)候要注意啦,靜態(tài)初始化在程序運(yùn)行過程中只會(huì)在Class對(duì)象首次加載的時(shí)候運(yùn)行一次。這些資源都會(huì)放在jvm的方法區(qū)。

  方法區(qū)又叫靜態(tài)區(qū),跟堆一樣,被所有的線程共享。

  方法區(qū)中包含的都是在整個(gè)程序中永遠(yuǎn)唯一的元素,包含所有的class和static變量。

三、初始化對(duì)象Dogdog=newDog()

  1.第一次創(chuàng)建Dog對(duì)象先執(zhí)行上面的一二步

  2.在堆上為Dog對(duì)象分配足夠的存儲(chǔ)空間,所有屬性和方法都被設(shè)置成默認(rèn)值(數(shù)字為0,字符為null,布爾為false,而所有引用被設(shè)置成null)

  3.執(zhí)行構(gòu)造函數(shù)檢查是否有父類,如果有父類會(huì)先調(diào)用父類的構(gòu)造函數(shù),這里假設(shè)Dog沒有父類,執(zhí)行默認(rèn)值字段的賦值即方法的初始化動(dòng)作。

  4.執(zhí)行構(gòu)造函數(shù)。

有父類情況下的初始化

  假設(shè):DogextendsAnimal

  1、執(zhí)行第一步,找出Dog.class文件,接著在加載過程中發(fā)現(xiàn)他有一個(gè)基類(通過extends關(guān)鍵字),于是先執(zhí)行Animal類的第一二步,加載其靜態(tài)變量和方法,加載結(jié)束之后再加載子類Dog的靜態(tài)變量和方法。

  如果Animal類還有父類就以此類推,最終的基類叫做根基類。

  注意:因?yàn)樽宇惖膕tatic初始化可能會(huì)依賴于父類的靜態(tài)資源,所以要先加載父類的靜態(tài)資源。

  2、接著要newDog對(duì)象,先為Dog對(duì)象分配存儲(chǔ)空間->到Dog的構(gòu)造函數(shù)->創(chuàng)建默認(rèn)的屬性。這里其構(gòu)造函數(shù)里面的第一行有個(gè)隱含的super(),即父類構(gòu)造函數(shù),所以這時(shí)會(huì)跳轉(zhuǎn)到父類Animal的構(gòu)造函數(shù)。

  Java會(huì)幫我們完成構(gòu)造函數(shù)的補(bǔ)充,Dog實(shí)際隱式的構(gòu)造函數(shù)如下:

  Dog(){

  //創(chuàng)建默認(rèn)的屬性和方法

  //調(diào)用父類的構(gòu)造函數(shù)super()(可顯式寫出)

  //對(duì)默認(rèn)屬性和方法分別進(jìn)行賦值和初始化

  }

  3、父類Animal執(zhí)行構(gòu)造函數(shù)前也是分配存儲(chǔ)空間->到其構(gòu)造函數(shù)->創(chuàng)建默認(rèn)的屬性->發(fā)現(xiàn)挖槽我已經(jīng)沒有父類了,這個(gè)時(shí)候就給它的默認(rèn)的屬性賦值和方法的初始化。

  4、接著執(zhí)行構(gòu)造函數(shù)余下的部分,結(jié)束后跳轉(zhuǎn)到子類Dog的構(gòu)造函數(shù)。

  5、子類Dog對(duì)默認(rèn)屬性和方法分別進(jìn)行賦值和初始化,接著完成構(gòu)造函數(shù)接下來的部分。

到此,相信大家對(duì)“Java對(duì)象怎么初始化”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI