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