java中的自由塊分為兩種:
靜態塊和非靜態塊
靜態塊:
1 public class Test { 2 static int x = 10; 3 //靜態塊:靜態塊的執行時機是在class文件裝載的時候;靜態塊只會執行一次 4 //多個靜態塊的時候,按出現順序執行 5 static{ 6 x+=5; 7 } 8 }
非靜態塊:
1 public class Test { 2 //非靜態塊:每次初始化一個對象,都會導致一次非靜態塊的執行;在構造函數執行之前執行 3 //繼承關系:父類的非靜態塊->父類的構造函數->自己的自由塊->自己的構造函數 4 { 5 System.out.println("before"); 6 } 7 }
測試demo:
1 public class Test { 2 3 static int x = 10; 4 //靜態塊:靜態塊的執行時機是在class文件裝載的時候;靜態塊只會執行一次 5 //多個靜態塊的時候,按出現順序執行 6 static{ 7 x+=5; 8 } 9 public static void main(String[] args) { 10 new Test(); 11 System.out.println(x); 12 } 13 //靜態塊 14 static { 15 x/=3; 16 } 17 public Test(){ 18 System.out.println("構造函數"); 19 } 20 //非靜態塊:每次初始化一個對象,都會導致一次非靜態塊的執行;在構造函數執行之前執行 21 //繼承關系:父類的非靜態塊->父類的構造函數->自己的自由塊->自己的構造函數 22 { 23 System.out.println("before"); 24 } 25 }
控制台輸出:
before
構造函數
5
更多信息:java自由塊