java中普通代碼塊,構(gòu)造代碼和構(gòu)造方法的靜態(tài)代碼塊的優(yōu)先級

執(zhí)行順序

靜態(tài)代碼塊>main()方法>構(gòu)造方法>普通代碼塊

簡單的給大家分析一下,當(dāng)jvm加載類的時候是將類文件中的內(nèi)容一行一行的加載到內(nèi)存中的(除了實例變量,因為這是對象私有的),但不執(zhí)行任何語句,即使加載時有輸出語句也不會輸出。加載的時候把靜態(tài)成員變量,靜態(tài)代碼塊,構(gòu)造代碼塊,靜態(tài)方法,加載到方法區(qū)的靜態(tài)部分。把構(gòu)造方法,非靜態(tài)方法加載到方法區(qū)的非靜態(tài)部分。

類文件加載好以后,開始執(zhí)行靜態(tài)代碼塊,然后在堆中開辟內(nèi)存空間,分配內(nèi)存地址。接著開始在堆內(nèi)存中對實例變量進(jìn)行默認(rèn)初始化,然后開始執(zhí)行構(gòu)造代碼塊,對對象進(jìn)行對應(yīng)的構(gòu)造代碼塊的初始化,最后進(jìn)行構(gòu)造函數(shù)的初始化,對對象進(jìn)行構(gòu)造方法的初始化。

重點說一下靜態(tài)代碼塊

靜態(tài)代碼塊:在java中使用static關(guān)鍵字聲明的代碼塊。靜態(tài)塊用于初始化類,為類的屬性初始化。每個靜態(tài)代碼塊只會執(zhí)行一次。由于JVM在加載類時會執(zhí)行靜態(tài)代碼塊,所以靜態(tài)代碼塊先于主方法執(zhí)行。

如果類中包含多個靜態(tài)代碼塊,那么將按照"先定義的代碼先執(zhí)行,后定義的代碼后執(zhí)行"。

注意:1 靜態(tài)代碼塊不能存在于任何方法體內(nèi)。

2 靜態(tài)代碼塊不能直接訪問靜態(tài)實例變量和實例方法,需要通過類的實例對象來訪問。

總結(jié)

1.靜態(tài)代碼塊是用來給類做初始化的,類加載是就會被執(zhí)行,(注意它只被執(zhí)行了一次);

? ? ? ?2.構(gòu)造代碼塊是用來給對象做初始化的,每次創(chuàng)建對象都會被執(zhí)行,而且優(yōu)先于構(gòu)造方法先執(zhí)行;

3.構(gòu)造方法是用來給對象進(jìn)行初始化的,每次創(chuàng)建對象就會選擇相應(yīng)的構(gòu)造方法執(zhí)行

? ? ? ?4.普通代碼是在方法里或者語句中出現(xiàn)的{},執(zhí)行方式由他們的出現(xiàn)順序決定,依次從上到下,先出現(xiàn)先執(zhí)行;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容