關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析
前言
一般情況下,如果有些代碼必須在項(xiàng)目啟動(dòng)的時(shí)候就執(zhí)行的時(shí)候,需要使用靜態(tài)代碼塊,這種代碼是主動(dòng)執(zhí)行的;需要在項(xiàng)目啟動(dòng)的時(shí)候就初始化,在不創(chuàng)建對(duì)象的情況下,其他程序來(lái)調(diào)用的時(shí)候,需要使用靜態(tài)方法,這種代碼是被動(dòng)執(zhí)行的, 靜態(tài)方法在類加載的時(shí)候就已經(jīng)加載,可以用類名直接調(diào)用。
比如main方法就必須是靜態(tài)的,這是程序入口
兩者的區(qū)別就是:
- 靜態(tài)代碼塊是自動(dòng)執(zhí)行的;
- 靜態(tài)方法是被調(diào)用的時(shí)候才執(zhí)行的.
問(wèn)題及總結(jié)
關(guān)于靜態(tài)代碼塊其實(shí)是面試時(shí)老生常談的問(wèn)題,雖然面試時(shí)問(wèn)了我也大概知道,但是在用的時(shí)候還是踩了個(gè)小坑。我想通過(guò)調(diào)用類的靜態(tài)變量來(lái)觸發(fā)靜態(tài)代碼塊的調(diào)用,但是沒有成功。
總結(jié)下靜態(tài)代碼塊能執(zhí)行的條件:
第一次初始化對(duì)象
第一次調(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時(shí)static代碼塊不執(zhí)行,即調(diào)用靜態(tài)代碼塊前面的靜態(tài)變量,靜態(tài)代碼塊不會(huì)執(zhí)行。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
springboot對(duì)象為null的屬性在json中不顯示的解決
這篇文章主要介紹了springboot對(duì)象為null的屬性在json中不顯示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09SpringBoot加載讀取配置文件過(guò)程詳細(xì)分析
在實(shí)際的項(xiàng)目開發(fā)過(guò)程中,我們經(jīng)常需要將某些變量從代碼里面抽離出來(lái),放在配置文件里面,以便更加統(tǒng)一、靈活的管理服務(wù)配置信息。所以本文將為大家總結(jié)一下SpringBoot加載配置文件的常用方式,需要的可以參考一下2023-01-01

遠(yuǎn)程連接Jedis和整合SpringBoot的詳細(xì)過(guò)程

Spring 校驗(yàn)(validator,JSR-303)簡(jiǎn)單實(shí)現(xiàn)方式

jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹