因?yàn)槠胀ǔ蓡T變量相比構(gòu)造方法不管順序優(yōu)先加載

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括邳州網(wǎng)站建設(shè)、邳州網(wǎng)站制作、邳州網(wǎng)頁(yè)制作以及邳州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,邳州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到邳州省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
java 初始化順序:
靜態(tài)成員變量靜態(tài)初始化塊普通成員變量普通的初始化塊構(gòu)造方法(自動(dòng)初始化時(shí)機(jī)在調(diào)用任何方法之前(構(gòu)造方法,成員方法))
在創(chuàng)建新的對(duì)象時(shí),也就是new一個(gè)對(duì)象時(shí),會(huì)開始初始化這個(gè)對(duì)象,在初始化這個(gè)對(duì)象時(shí),會(huì)找到對(duì)應(yīng)的類,如果類中有static的靜態(tài)方法,靜態(tài)成員變量,普通變量。。。等,會(huì)按照這個(gè)順序執(zhí)行(即按照這個(gè)順序分配內(nèi)容空間,不管他們的位置在哪里,如果是同類型,則按照上下順序執(zhí)行。)
先說(shuō)執(zhí)行順序:我們?cè)趎ew一個(gè)對(duì)象時(shí),如果類還沒加載,就需要先將類加載到內(nèi)存,此時(shí)就會(huì)執(zhí)行靜態(tài)代碼塊,在創(chuàng)建對(duì)象時(shí),是先執(zhí)行代碼塊,然后執(zhí)行構(gòu)造器。所以靜態(tài)代碼塊、代碼塊、構(gòu)造器的執(zhí)行順序是:靜態(tài)代碼塊→代碼塊→構(gòu)造器。
再說(shuō)作用:靜態(tài)代碼塊是用于初始化類的(在加載類時(shí)執(zhí)行,只執(zhí)行一次),代碼塊是用于初始化對(duì)象的(在創(chuàng)建對(duì)象時(shí)執(zhí)行,每次創(chuàng)建對(duì)象時(shí)都執(zhí)行),構(gòu)造器是用于創(chuàng)建對(duì)象的。
這里只說(shuō)一個(gè)完整的結(jié)果 至于為什么是這樣的順序 可以參考我以前的文章 深入剖析java類的構(gòu)造方式
如果父類有靜態(tài)成員賦值或者靜態(tài)初始化塊 執(zhí)行靜態(tài)成員賦值和靜態(tài)初始化塊 如果類有靜態(tài)成員賦值或者靜態(tài)初始化塊 執(zhí)行靜態(tài)成員賦值和靜態(tài)初始化塊 將類的成員賦予初值(原始類型的成員的值為規(guī)定值 例如int型為 float型為 f boolean型為false 對(duì)象類型的初始值為null) 如果構(gòu)造方法中存在this()調(diào)用(可以是其它帶參數(shù)的this()調(diào)用)則執(zhí)行之 執(zhí)行完畢后進(jìn)入第 步繼續(xù)執(zhí)行 如果沒有this調(diào)用則進(jìn)行下一步 (這個(gè)有可能存在遞歸調(diào)用其它的構(gòu)造方法) 執(zhí)行顯式的super()調(diào)用(可以是其它帶參數(shù)的super()調(diào)用)或者隱式的super()調(diào)用(缺省構(gòu)造方法) 此步驟又進(jìn)入一個(gè)父類的構(gòu)造過(guò)程并一直上推至Object對(duì)象的構(gòu)造 執(zhí)行類申明中的成員賦值和初始化塊 執(zhí)行構(gòu)造方法中的其它語(yǔ)句
其中第 步是比較麻煩的 因?yàn)閠his調(diào)用實(shí)際上會(huì)調(diào)用類的另外一個(gè)構(gòu)造方法 最終應(yīng)該是執(zhí)行類的某個(gè)構(gòu)造方法 它可能會(huì)顯示的調(diào)用super 但是無(wú)論是否調(diào)用super 最終都是執(zhí)行super的 也就是父類的構(gòu)造方法并一直這樣遞歸到Object 所以在子類和父類的構(gòu)造中 首先構(gòu)造或者說(shuō)執(zhí)行的是父類的構(gòu)造 但是它是由子類的構(gòu)造方法調(diào)用的 先于構(gòu)造方法的方法體里面的內(nèi)容 這個(gè)是由編譯器決定的 所以我感覺簡(jiǎn)單直觀一些的順序表述應(yīng)該是
如果父類有靜態(tài)成員賦值或者靜態(tài)初始化塊 執(zhí)行靜態(tài)成員賦值和靜態(tài)初始化塊 如果類有靜態(tài)成員賦值或者靜態(tài)初始化塊 執(zhí)行靜態(tài)成員賦值和靜態(tài)初始化塊 將類的成員賦予初值(原始類型的成員的值為規(guī)定值 例如int型為 float型為 f boolean型為false 對(duì)象類型的初始值為null) 執(zhí)行構(gòu)造方法 并可能遞歸調(diào)用this() 最終先執(zhí)行父類的構(gòu)造方法并一直遞歸到Object的構(gòu)造方法的執(zhí)行 父類的構(gòu)造方法執(zhí)行完成后 執(zhí)行類申明中的成員賦值和初始化塊 執(zhí)行構(gòu)造方法中的其它語(yǔ)句
最終的簡(jiǎn)化順序版本是
父類的靜態(tài)成員賦值和靜態(tài)塊 子類的靜態(tài)成員和靜態(tài)塊 父類的構(gòu)造方法 父類的成員賦值和初始化塊 父類的構(gòu)造方法中的其它語(yǔ)句 子類的成員賦值和初始化塊 子類的構(gòu)造方法中的其它語(yǔ)句 lishixinzhi/Article/program/Java/hx/201311/27010
分享標(biāo)題:java代碼塊構(gòu)造順序 構(gòu)造代碼塊和構(gòu)造函數(shù)執(zhí)行順序
文章URL:http://chinadenli.net/article36/hjeesg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站改版、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容