深入淺析Java中普通代碼塊、構(gòu)造代碼塊與靜態(tài)代碼塊
//執(zhí)行順序:(優(yōu)先級從高到低。)
靜態(tài)代碼塊>mian方法>構(gòu)造代碼塊>構(gòu)造方法。
其中靜態(tài)代碼塊只執(zhí)行一次。構(gòu)造代碼塊在每次創(chuàng)建對象是都會執(zhí)行。
1.普通代碼塊
public static void main(String[] args) { /*普通代碼塊: *直接定義在在方法或語句中出現(xiàn)”{普通代碼的執(zhí)行語句}“的就稱為普通代碼塊。 *普通代碼塊執(zhí)行順序由他們在代碼中出現(xiàn)的次序決定--“先出現(xiàn)先執(zhí)行” * */ { System.out.println("這里是普通代碼塊A"); } //new A(); { System.out.println("這里是普通代碼塊B"); } }
執(zhí)行結(jié)果:這里是普通代碼塊A
這里是普通代碼塊B
2.靜態(tài)代碼塊與構(gòu)造代碼塊
在java中使用static關(guān)鍵字聲明的代碼塊。
常用于對類的初始化,每個靜態(tài)代碼塊只會執(zhí)行一次(類在內(nèi)存中加載時執(zhí)行,類在內(nèi)存中加載后類已經(jīng)存在)由于JVM在加載類時會執(zhí)行靜態(tài)代碼塊,所以靜態(tài)代碼塊先于主方法執(zhí)行。如果類中包含多個靜態(tài)代碼塊,那么將按照"先定義的代碼先執(zhí)行,后定義的代碼后執(zhí)行。
ps:
1 靜態(tài)代碼塊不能存在于任何方法體內(nèi)。
2 靜態(tài)代碼塊不能直接訪問靜態(tài)實例變量和實例方法,需要通過類的實例對象來訪問。
構(gòu)造塊:直接在類中定義且沒有加static關(guān)鍵字的代碼塊稱為{}構(gòu)造代碼塊。
構(gòu)造代碼塊在創(chuàng)建對象時被調(diào)用,每次創(chuàng)建對象都會被調(diào)用,并且構(gòu)造代碼塊的執(zhí)行次序優(yōu)先于類構(gòu)造函數(shù)。
public class structure { { System.out.println("這里是普通代碼塊");//所有類中有一個默認(rèn)的構(gòu)造函數(shù),這里的代碼塊為構(gòu)造代碼塊,在類中的對象被創(chuàng)建時執(zhí)行 } public static void main(String[] args) { /*普通代碼塊: *直接定義在在方法或語句中出現(xiàn)”{普通代碼的執(zhí)行語句}“的就稱為普通代碼塊。 *普通代碼塊執(zhí)行順序由他們在代碼中出現(xiàn)的次序決定--“先出現(xiàn)先執(zhí)行” * */ { System.out.println("這里是普通代碼塊A"); } new structure();//第二次類加載時靜態(tài)代碼塊不執(zhí)行 //new A(); { System.out.println("這里是普通代碼塊B"); } } static{ System.out.println("這里是靜態(tài)代碼塊"); } }
執(zhí)行結(jié)果:
這里是靜態(tài)代碼塊//優(yōu)先于主函數(shù)
這里是普通代碼塊A
這里是普通代碼塊//類中的對象被創(chuàng)建時執(zhí)行,每創(chuàng)建一次執(zhí)行一次,在加一句new structure(); 執(zhí)行結(jié)果為:
這里是普通代碼塊B
3.概要總結(jié)
public class structure { { System.out.println("這里是普通代碼塊"); } public static void main(String[] args) { { System.out.println("這里是普通代碼塊A"); } //new structure(); //new structure(); new A(); { System.out.println("這里是普通代碼塊B"); } } static{ System.out.println("這里是靜態(tài)代碼塊"); } } class A{ static{ System.out.println("這里是A中的普靜態(tài)代碼塊1"); } { System.out.println("這里是A中的普通代碼塊1"); } { System.out.println("這里是A中的普通代碼塊2"); } }
執(zhí)行結(jié)果:
這里是靜態(tài)代碼塊
這里是普通代碼塊A
這里是A中的普靜態(tài)代碼塊1
這里是A中的普通代碼塊1
這里是A中的普通代碼塊2
這里是普通代碼塊B
優(yōu)先級總結(jié):靜態(tài)代碼塊>Main()>構(gòu)造代碼塊
相關(guān)文章
JVM入門之JVM內(nèi)存結(jié)構(gòu)內(nèi)容詳解
這篇文章主要介紹了JVM入門之JVM內(nèi)存結(jié)構(gòu)內(nèi)容詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Java 讀取、獲取配置文件.properties中的數(shù)據(jù)
這篇文章主要介紹了Java 讀取、獲取配置文件.properties中的數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09Kotlin語法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡單總結(jié)
這篇文章主要介紹了Kotlin語法學(xué)習(xí)-變量定義、函數(shù)擴(kuò)展、Parcelable序列化等簡單總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-05-05Mybatis中${param}與#{param}的區(qū)別說明
這篇文章主要介紹了Mybatis中${param}與#{param}的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06IntelliJ IDEA導(dǎo)入Gradle項目的方法
這篇文章主要介紹了IntelliJ IDEA導(dǎo)入Gradle項目的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決
這篇文章主要介紹了SpringBoot URL帶有特殊字符([]/{}等),報400錯誤的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02教你Spring Cloud保證各個微服務(wù)之間調(diào)用安全性
在微服務(wù)的架構(gòu)下,系統(tǒng)會根據(jù)業(yè)務(wù)拆分為多個服務(wù),各自負(fù)責(zé)單一的職責(zé),在這樣的架構(gòu)下,我們需要確保各api的安全性,今天通過本文給大家分享Spring Cloud中如何保證各個微服務(wù)之間調(diào)用的安全性,需要的朋友參考下吧2021-08-08