package 代码块; class mmm{ //构造块 { System.out.println("mmm 1 普通块");//每次实例化都执行一次,且在构造方法之前。 } //静态代码块 static { System.out.println("mmm 2 static");//优先于构造方法和普通块,且只执行一次 } //构造方法 public mmm() { System.out.println("mmm 3 构造方法"); } } public class 代码块 { public static void main(String[] args) { // TODO Auto-generated method stub { int x = 1; System.out.println("主类 1 普通块 "+x);//在主类中 普通块 } int x = 2; System.out.println("主类 3 mian方法 "+x); new mmm(); new mmm(); new mmm(); } { System.out.println("主类 4 普通块");//在主类中main之外 普通块不会调用 } //主类静态代码块 static { System.out.println("主类 2 static");//在主类中main之外 普通块会调用,且在main方法之前 } }
输出结果:
1 主类 2 static 2 主类 1 普通块 1 3 主类 3 mian方法 2 4 mmm 2 static 5 mmm 1 普通块 6 mmm 3 构造方法 7 mmm 1 普通块 8 mmm 3 构造方法 9 mmm 1 普通块 10 mmm 3 构造方法
总结:
在一个类中,构造块每次实例化都会执行,且优先于构造方法,static构造块又称为静态代码块,更优先于构造块调用,且只调用一次,一般用来初始化静态属性。