測試代碼
public class SingleTest { public static String v = "StaticValue"; static { System.out.println("static靜態變量:" + v); System.out.println("static靜態塊"); } { System.out.println("構造塊"); } public SingleTest() { System.out.println("構造函數"); } public void say() { System.out.println("普通方法"); } public static void main(String[] args) { System.out.println("main 開始"); SingleTest singleTest = new SingleTest(); singleTest.say(); System.out.println("main 結束"); } }
結果
解釋
JVM虛擬機一啓動就會僅加載一次所有static變量,之後僅加載一次所有static代碼塊。每當有類實例化時,構造塊都會早於構造函數執行,然後再執行構造函數。
結論
一個類實例化時的執行順序:
靜態變量 > 靜態代碼塊 > 構造代碼塊 > 構造函數
細化執行順序爲:
靜態變量 > 靜態代碼塊 > main函數 > 構造代碼塊 > 構造函數 > 普通方法
查看類繼承時,靜態塊、構造塊、構造函數等的執行順序,請點擊