Java程序初始化順序

? ? 今天在課上復(fù)習(xí)了Java的初始化順序放闺,一直有點(diǎn)疑惑凶赁,搞不明白,所以打算寫下來臊恋,記錄一下衣洁。


? 先說一下Java程序初始化的順序:父類靜態(tài)變量>父類靜態(tài)代碼塊>子類靜態(tài)變量>子類靜態(tài)代碼塊>父類非靜態(tài)變量>父類非靜態(tài)代碼塊>父類構(gòu)造器>子類非靜態(tài)變量>子類非靜態(tài)代碼塊>子類構(gòu)造器。


Java程序初始化一般遵循3個(gè)原則

1.靜態(tài)對(duì)象(變量)先于非靜態(tài)對(duì)象(變量)初始化抖仅。其中靜態(tài)對(duì)象(變量)只初始化一次坊夫,因?yàn)閟tatic在jvm中只有一塊區(qū)域存儲(chǔ),方法區(qū)(Method Area)撤卢,他之所以被稱為靜態(tài)是因?yàn)閺某绦騽?chuàng)建到死亡他的地址值都不會(huì)改變环凿,他只在class類對(duì)象初次加載時(shí)初始化,因此static只需要初始化一次放吩,而非靜態(tài)對(duì)象(變量)可能會(huì)初始化很多次智听。

2.如果類之間存在繼承關(guān)系,那么父類優(yōu)先于子類進(jìn)行初始化渡紫。

3.按照成員變量的定義順序進(jìn)行初始化到推。即使變量定義散布于方法之中,他們依然在任何方法(包括構(gòu)造函數(shù))被調(diào)用前先初始化腻惠。

接下來我們先來看來《Thinking in Java 》的代碼示例:


在Card中环肘,Tag對(duì)象的實(shí)例化故意到處散布欲虚,in order to 使得他們都在構(gòu)造器進(jìn)入或者發(fā)生其它任何事情之前得到初始化集灌。除此之外,t3在構(gòu)造器內(nèi)部得到了重新的初始化复哆。

下面我們來看看運(yùn)行結(jié)果:

如果想在定義的同時(shí)進(jìn)行初始化欣喧,采取的方法與非靜態(tài)值表面看起來是相同的。但由于static值只有一個(gè)存儲(chǔ)區(qū)域梯找,所以無論創(chuàng)建了多少個(gè)對(duì)象唆阿,都必然會(huì)遇到何時(shí)對(duì)那個(gè)存儲(chǔ)區(qū)域進(jìn)行初始化的問題。下面來看一段《Thinking in Java 》代碼:



注意在static定義之前锈锤,Cupboard已經(jīng)實(shí)例化了一個(gè)非靜態(tài)的b3.


大家拿出紙筆來算算會(huì)輸出個(gè)什么個(gè)結(jié)果嗎驯鳖,你的思路是否還清晰呢,還是像筆者一樣已經(jīng)云里霧里了久免,好了不賣關(guān)子了浅辙,我們來看看輸出的結(jié)果:


是否和你在紙上的答案一樣呢?

我們來剖析一下這個(gè)程序阎姥,首先看main方法记舆,main方法里首先會(huì)初始化靜態(tài)對(duì)象t2,t3,在jvm的方法區(qū)里創(chuàng)建一個(gè)t2的靜態(tài)對(duì)象呼巴,指向Table類泽腮,然后在創(chuàng)建一個(gè)t3的靜態(tài)對(duì)象指向Cupboard.

然后程序繼續(xù)運(yùn)行到Table類里御蒲,初始化靜態(tài)對(duì)象b1,跳轉(zhuǎn)到Bowl類诊赊,執(zhí)行Bowl的構(gòu)造器厚满,打印輸出Bowl(1),進(jìn)入bowl類碧磅,初始化靜態(tài)對(duì)象b2痰滋,跳轉(zhuǎn)到Bowl類,執(zhí)行Bowl的構(gòu)造器续崖,打印輸出Bowl(2)敲街,回到Table類,執(zhí)行Table類的構(gòu)造器严望,打印輸出Table()多艇,執(zhí)行b2.f(1),打印輸出f(1)像吻,此時(shí)峻黍,靜態(tài)對(duì)象t2的任務(wù)已經(jīng)完成了。

接下來時(shí)t3的任務(wù)拨匆,進(jìn)入Cupboard類姆涩,初始化靜態(tài)對(duì)象b4,跳轉(zhuǎn)到Bowl類惭每,打印輸出Bowl(4)骨饿,初始化靜態(tài)對(duì)象b5,跳轉(zhuǎn)到Bowl類台腥,打印輸出Bowl(5),初始化非靜態(tài)對(duì)象b3宏赘,跳轉(zhuǎn)到Bowl類,打印輸出Bowl(3),然后執(zhí)行Cupboard的構(gòu)造器黎侈,打印輸出Cupboard()察署,next,執(zhí)行b4.f(2)峻汉,打印輸出f(2)贴汪,此時(shí)靜態(tài)對(duì)象t3的任務(wù)已經(jīng)完成了。

回到main函數(shù)里休吠,執(zhí)行非靜態(tài)變量扳埂,打印輸出一個(gè)Creating new Cupboard() in main,在new一個(gè)Cupboard蛛碌,初始化非靜態(tài)對(duì)象b3聂喇,跳轉(zhuǎn)到Bowl類,打印輸出Bowl(3),然后執(zhí)行Cupboard的構(gòu)造器,打印輸出Cupboard()希太,next克饶,執(zhí)行b4.f(2),打印輸出f(2)誊辉,然后繼續(xù)打印一個(gè)Creating new Cupboard() in main矾湃,繼續(xù)new一個(gè)Cupboard,初始化非靜態(tài)對(duì)象b3堕澄,跳轉(zhuǎn)到Bowl類邀跃,打印輸出Bowl(3),然后執(zhí)行Cupboard的構(gòu)造器,打印輸出Cupboard()蛙紫,next拍屑,執(zhí)行b4.f(2),打印輸出f(2)坑傅。

最后執(zhí)行t2.f2(1)僵驰,t2指向的是Table類,所以打印輸出f2(1)唁毒,同理蒜茴,t3.f3(3)打印輸出f3(3).

到此為止,這段代碼已經(jīng)被我們解剖的清清楚楚了浆西,所以對(duì)Java的初始化順序應(yīng)該印象更深了吧粉私!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市近零,隨后出現(xiàn)的幾起案子诺核,更是在濱河造成了極大的恐慌,老刑警劉巖秒赤,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪瞬,死亡現(xiàn)場(chǎng)離奇詭異憎瘸,居然都是意外死亡入篮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門幌甘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潮售,“玉大人,你說我怎么就攤上這事锅风∷址蹋” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵皱埠,是天一觀的道長(zhǎng)肮帐。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么训枢? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任托修,我火速辦了婚禮,結(jié)果婚禮上恒界,老公的妹妹穿的比我還像新娘睦刃。我一直安慰自己,他們只是感情好十酣,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布涩拙。 她就那樣靜靜地躺著,像睡著了一般耸采。 火紅的嫁衣襯著肌膚如雪兴泥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天虾宇,我揣著相機(jī)與錄音郁轻,去河邊找鬼。 笑死文留,一個(gè)胖子當(dāng)著我的面吹牛好唯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燥翅,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼骑篙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了森书?” 一聲冷哼從身側(cè)響起靶端,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凛膏,沒想到半個(gè)月后杨名,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猖毫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年台谍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吁断。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趁蕊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仔役,到底是詐尸還是另有隱情掷伙,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布又兵,位于F島的核電站任柜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宙地,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一升熊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绸栅,春花似錦级野、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至风纠,卻和暖如春况鸣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竹观。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工镐捧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臭增。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓懂酱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親誊抛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子列牺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 類的加載與對(duì)象創(chuàng)建過程 Java中每個(gè)類的編譯代碼都存在于他自己的獨(dú)立的文件中。該文件只在需要使用程序代碼時(shí)才會(huì)被...
    Specime閱讀 452評(píng)論 0 0
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法拗窃,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,233評(píng)論 0 2
  • 整理總結(jié) 隨著計(jì)算機(jī)革命的發(fā)展瞎领,“不安全”的編程方式已逐漸稱為編程代價(jià)高昂的主因之一。其中随夸,初始化與清理正是涉及安...
    信陽(yáng)_856b閱讀 192評(píng)論 0 0
  • 我還是會(huì)相信九默,星星會(huì)說話,石頭會(huì)開花宾毒,穿過夏天的柵欄和冬天的風(fēng)雪過后驼修,你終會(huì)抵達(dá)。---饒雪漫《左耳終結(jié)》 工作至...
    piggy的小花園閱讀 219評(píng)論 2 2
  • # 一起學(xué)思維導(dǎo)圖 # 今天分享的導(dǎo)圖【開啟大腦的鑰匙】 這是和我一起學(xué)思維導(dǎo)圖的小伙伴寫的伍俘,很精彩邪锌! 思維導(dǎo)圖是...
    思維導(dǎo)圖達(dá)人_桃子閱讀 344評(píng)論 0 0