3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
是的,你是對(duì)的。當(dāng)JVM(具體來說是類加載器)加載時(shí)StaticClass
(在第一次在代碼中引用它時(shí)),將運(yùn)行靜態(tài)初始化塊。
您可以通過顯式調(diào)用來強(qiáng)制調(diào)用此方法,StaticClass.init()
這比依賴JVM更可取。
您也可以嘗試使用Class.forName(String)
強(qiáng)制JVM加載類并調(diào)用其靜態(tài)塊。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
首先,類加載不同于類初始化。對(duì)于從Java語言規(guī)范中尋求解釋的任何人,何時(shí)執(zhí)行靜態(tài)塊-在這里。
該JLS§8.7說:
在初始化類時(shí),將執(zhí)行在類中聲明的靜態(tài)初始化程序(第12.4.2節(jié))。
那么初始化是什么意思呢?讓我們參考JLS§12.4.2。這描述了詳細(xì)的初始化過程。但是,此處JLS§12.4.1可能更合適。它說:
類或接口類型T將在以下任何一種首次出現(xiàn)之前立即初始化:
T是一個(gè)類,并創(chuàng)建T的實(shí)例。
T是一個(gè)類,并調(diào)用T聲明的靜態(tài)方法。
分配由T聲明的靜態(tài)字段。
使用由T聲明的靜態(tài)字段,并且該字段不是常量變量(第4.12.4節(jié))。
T是頂級(jí)類(第7.6節(jié)),并執(zhí)行詞法嵌套在T中的斷言(第14.10節(jié))(第8.1.3節(jié))。
因此,要使靜態(tài)初始化程序塊自動(dòng)執(zhí)行,必須強(qiáng)制執(zhí)行這些選項(xiàng)之一。
添加回答
舉報(bào)