關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析
前言
一般情況下,如果有些代碼必須在項目啟動的時候就執(zhí)行的時候,需要使用靜態(tài)代碼塊,這種代碼是主動執(zhí)行的;需要在項目啟動的時候就初始化,在不創(chuàng)建對象的情況下,其他程序來調(diào)用的時候,需要使用靜態(tài)方法,這種代碼是被動執(zhí)行的, 靜態(tài)方法在類加載的時候就已經(jīng)加載,可以用類名直接調(diào)用。
比如main方法就必須是靜態(tài)的,這是程序入口
兩者的區(qū)別就是:
- 靜態(tài)代碼塊是自動執(zhí)行的;
- 靜態(tài)方法是被調(diào)用的時候才執(zhí)行的.
問題及總結(jié)
關(guān)于靜態(tài)代碼塊其實是面試時老生常談的問題,雖然面試時問了我也大概知道,但是在用的時候還是踩了個小坑。我想通過調(diào)用類的靜態(tài)變量來觸發(fā)靜態(tài)代碼塊的調(diào)用,但是沒有成功。
總結(jié)下靜態(tài)代碼塊能執(zhí)行的條件:
第一次初始化對象
第一次調(diào)用靜態(tài)方法
第一次調(diào)用靜態(tài)代碼塊下面的靜態(tài)變量
public class ConfigHandler { public static p1 = “p1”; static{ System.out.println("this is a static code block"); } public static p2 = “p2”; public static p3 ; public static init(){} }
static中System.out.println("this is a static code block");
可以執(zhí)行的情況如下:
new ConfigHandler();
System.out.println(ConfigHandler.p2);
System.out.println(ConfigHandler.p3)
ConfigHandler.init();
//在代碼中的位置任意
輸出p1時static代碼塊不執(zhí)行,即調(diào)用靜態(tài)代碼塊前面的靜態(tài)變量,靜態(tài)代碼塊不會執(zhí)行。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
springboot對象為null的屬性在json中不顯示的解決
這篇文章主要介紹了springboot對象為null的屬性在json中不顯示的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09關(guān)于elasticsearch的match_phrase_prefix查詢詳解
這篇文章主要介紹了關(guān)于elasticsearch的match_phrase_prefix查詢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Spring 校驗(validator,JSR-303)簡單實現(xiàn)方式
這篇文章主要介紹了Spring 校驗(validator,JSR-303)簡單實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10jdk-logging?log4j?logback日志系統(tǒng)實現(xiàn)機制原理介紹
這篇文章主要介紹了jdk-logging、log4j、logback日志介紹以及三個日志系統(tǒng)的實現(xiàn)機制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03