java代碼塊構(gòu)造順序 構(gòu)造代碼塊和構(gòu)造函數(shù)執(zhí)行順序

java為什么成員變量、構(gòu)造代碼塊 代碼先后順序不同結(jié)果也不同

因為普通成員變量相比構(gòu)造方法不管順序優(yōu)先加載

創(chuàng)新互聯(lián)服務(wù)項目包括邳州網(wǎng)站建設(shè)、邳州網(wǎng)站制作、邳州網(wǎng)頁制作以及邳州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,邳州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到邳州省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

java 初始化順序:

靜態(tài)成員變量靜態(tài)初始化塊普通成員變量普通的初始化塊構(gòu)造方法(自動初始化時機在調(diào)用任何方法之前(構(gòu)造方法,成員方法))

在創(chuàng)建新的對象時,也就是new一個對象時,會開始初始化這個對象,在初始化這個對象時,會找到對應(yīng)的類,如果類中有static的靜態(tài)方法,靜態(tài)成員變量,普通變量。。。等,會按照這個順序執(zhí)行(即按照這個順序分配內(nèi)容空間,不管他們的位置在哪里,如果是同類型,則按照上下順序執(zhí)行。)

java中的靜態(tài)代碼塊、代碼塊、構(gòu)造器的執(zhí)行順序是怎樣呢,這三者有什么作用呢

先說執(zhí)行順序:我們在new一個對象時,如果類還沒加載,就需要先將類加載到內(nèi)存,此時就會執(zhí)行靜態(tài)代碼塊,在創(chuàng)建對象時,是先執(zhí)行代碼塊,然后執(zhí)行構(gòu)造器。所以靜態(tài)代碼塊、代碼塊、構(gòu)造器的執(zhí)行順序是:靜態(tài)代碼塊→代碼塊→構(gòu)造器。

再說作用:靜態(tài)代碼塊是用于初始化類的(在加載類時執(zhí)行,只執(zhí)行一次),代碼塊是用于初始化對象的(在創(chuàng)建對象時執(zhí)行,每次創(chuàng)建對象時都執(zhí)行),構(gòu)造器是用于創(chuàng)建對象的。

Java類的完整構(gòu)造執(zhí)行順序

這里只說一個完整的結(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 對象類型的初始值為null) 如果構(gòu)造方法中存在this()調(diào)用(可以是其它帶參數(shù)的this()調(diào)用)則執(zhí)行之 執(zhí)行完畢后進(jìn)入第 步繼續(xù)執(zhí)行 如果沒有this調(diào)用則進(jìn)行下一步 (這個有可能存在遞歸調(diào)用其它的構(gòu)造方法) 執(zhí)行顯式的super()調(diào)用(可以是其它帶參數(shù)的super()調(diào)用)或者隱式的super()調(diào)用(缺省構(gòu)造方法) 此步驟又進(jìn)入一個父類的構(gòu)造過程并一直上推至Object對象的構(gòu)造 執(zhí)行類申明中的成員賦值和初始化塊 執(zhí)行構(gòu)造方法中的其它語句

其中第 步是比較麻煩的 因為this調(diào)用實際上會調(diào)用類的另外一個構(gòu)造方法 最終應(yīng)該是執(zhí)行類的某個構(gòu)造方法 它可能會顯示的調(diào)用super 但是無論是否調(diào)用super 最終都是執(zhí)行super的 也就是父類的構(gòu)造方法并一直這樣遞歸到Object 所以在子類和父類的構(gòu)造中 首先構(gòu)造或者說執(zhí)行的是父類的構(gòu)造 但是它是由子類的構(gòu)造方法調(diào)用的 先于構(gòu)造方法的方法體里面的內(nèi)容 這個是由編譯器決定的 所以我感覺簡單直觀一些的順序表述應(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 對象類型的初始值為null) 執(zhí)行構(gòu)造方法 并可能遞歸調(diào)用this() 最終先執(zhí)行父類的構(gòu)造方法并一直遞歸到Object的構(gòu)造方法的執(zhí)行 父類的構(gòu)造方法執(zhí)行完成后 執(zhí)行類申明中的成員賦值和初始化塊 執(zhí)行構(gòu)造方法中的其它語句

最終的簡化順序版本是

父類的靜態(tài)成員賦值和靜態(tài)塊 子類的靜態(tài)成員和靜態(tài)塊 父類的構(gòu)造方法 父類的成員賦值和初始化塊 父類的構(gòu)造方法中的其它語句 子類的成員賦值和初始化塊 子類的構(gòu)造方法中的其它語句 lishixinzhi/Article/program/Java/hx/201311/27010

分享標(biāo)題:java代碼塊構(gòu)造順序 構(gòu)造代碼塊和構(gòu)造函數(shù)執(zhí)行順序
文章URL:http://www.muchs.cn/article36/hjeesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機網(wǎng)站改版、移動網(wǎng)站建設(shè)網(wǎng)站設(shè)計公司、網(wǎng)站設(shè)計、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站