java 静态和非静态代码块执行顺序
class A { public A(){ System.out.println("A constructor."); } //非静态代码块 { System.out.print("A block-->"); } //静态代码块 static{ System.out.print("A static block-->"); } } class B extends A{ static{System.out.print("B static block-->");} {System.out.print("B block-->");} public B(){ //super(); System.out.println("B constructor."); } } //测试类 public class Main { public static void main(String[] args) { System.out.println("--------------a1--------------"); A a1 = new A(); System.out.println("--------------a2--------------"); A a2 = new A(); System.out.println("--------------b1--------------"); A b1 = new B(); System.out.println("--------------b2--------------"); A b2 = new B(); } }
执行结果:
可见,静态代码块在类被第一次使用时执行一次,之后不再执行。普通代码块每次使用类都要执行一次。且静态代码块先于普通代码块执行,之后执行构造函数,构造函数先执行父类再执行子类。特别注意父类构造器先于子类非静态代码块执行。