Java類的初始化過程包括以下幾個步驟:
加載類:當程序中使用到某個類時,Java虛擬機會先通過類加載器將該類的字節碼文件加載到內存中。
鏈接:鏈接是將被加載的類合并到Java虛擬機的運行時環境中的過程,包括驗證、準備和解析三個階段。
驗證:驗證字節碼文件是否符合Java虛擬機規范,包括安全性驗證和字節碼驗證等。
準備:為類的靜態變量分配內存并設置默認初始值,比如基本類型的變量會被設置為0,引用類型的變量會被設置為null。
解析:將常量池中的符號引用轉換為直接引用,這是為了后續的動態鏈接和運行時的調用準備工作。
初始化:在類的準備階段結束后,將執行類的初始化操作,包括為靜態變量賦值和執行靜態代碼塊。
賦值:將靜態變量按照代碼中的賦值語句進行賦值。
執行靜態代碼塊:執行類中的靜態代碼塊,靜態代碼塊中的代碼會按照在類中的順序執行。
需要注意的是,只有在使用類時才會觸發類的初始化操作,而且一個類只會被初始化一次。另外,子類的初始化會觸發父類的初始化操作,即父類的靜態代碼塊會在子類的靜態代碼塊之前執行。