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自由块