- 靜態代碼塊:在類被加載的時候就運行了,且只運行一次。static{}
- 構造代碼塊:在創建對象時被調用,每次創建對象都會調用一次。比靜態代碼塊少了static。{}
- 構造方法:用於創建對象時定義初始化的狀態。構造函數不能直接調用,必須通過new運算符在創建對象時才會自動調用,一般方法是在程序執行到它的時候被調用。
- 先不創建對象,如下:
-
public class Test { // 靜態代碼塊 static { System.out.println("靜態代碼塊"); } // 構造代碼塊 { System.out.println("構造代碼塊"); } // 構造方法 public Test() { System.out.println("構造方法"); } // main方法 public static void main(String[] args) { System.out.println("main方法"); } }
運行結果:
可見:先執行靜態代碼塊,后執行main方法。未創建對象,不執行構造代碼塊和構造方法。
- 下面實例化對象:
-
public static void main(String[] args) { System.out.println("main方法"); Test aTest = new Test(); }
結果:
可以看得出,創建對象后構造代碼塊先於構造函數運行
- 總結:在創建對象前,可以執行靜態代碼塊和main(),靜態代碼塊>main(),及時這兩者調換代碼順序也一樣。
- 在創建對象后,可以執行構造代碼塊和構造函數,構造代碼塊>構造函數,及時這兩者調換代碼順序也一樣。
- 在main()中,代碼按照順序執行。