静态代码块:
static{}
执行优先级高于非静态的初始化块,它会在类初始化(类初始化这个问题改天再详细讨论)的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。
非静态代码块:
{}
执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。
例程:
public class Test1 { public static String staticField = "静态变量"; public String field = "变量"; static{ System.out.println(staticField); System.out.println("静态初始块"); } { System.out.println(field); System.out.println("初始化块"); } public Test1() { System.out.println("构造器"); } public static void main(String[] args) { new Test1(); System.out.println(); new Test1(); } }
例程运行结果:
静态变量
静态初始块
变量
初始化块
构造器
变量
初始化块
构造器