???????? 靜態(tài)代碼塊(static block ),不包含在任何方法體中當(dāng)類被載入時(shí),自動執(zhí)行靜態(tài)代碼塊,且只被執(zhí)行一次經(jīng)常用于類屬性的初始化。 這是網(wǎng)上通行的關(guān)于靜態(tài)代碼塊的定義。
???????? 在Java中,類裝載器把一個(gè)類裝入Java虛擬機(jī)中,要經(jīng)過三個(gè)步驟來完成:裝載、鏈接和初始化,其中鏈接又可以分成校驗(yàn)、準(zhǔn)備和解析三步,除了解析外,其它步驟是嚴(yán)格按照順序完成的,各個(gè)步驟的主要工作如下:
- 裝載:查找和導(dǎo)入類或接口的二進(jìn)制數(shù)據(jù);
- 鏈接:執(zhí)行下面的校驗(yàn)、準(zhǔn)備和解析步驟,其中解析步驟是可以選擇的;
- 校驗(yàn):檢查導(dǎo)入類或接口的二進(jìn)制數(shù)據(jù)的正確性;
- 準(zhǔn)備:給類的靜態(tài)變量分配并初始化存儲空間;
- 解析:將符號引用轉(zhuǎn)成直接引用;
- 初始化:激活類的靜態(tài)變量的初始化Java代碼和靜態(tài)Java代碼塊。
初始化類中屬性是靜態(tài)代碼塊的常用用途,但只能使用一次。