public class A { static { System.out.println("staticA"); } public A() { System.out.println("Constuctor A"); } { System.out.println("{}A"); } public void run(){ System.out.println("I'm run() class A"); } }
public class B extends A { static { System.out.println("static B"); } public B() { System.out.println("constuctorB"); } { System.out.println("{}B"); } public void run(){ System.out.println("I'm run() in class B"); } }
public static void main(String []args){ B b = new B(); b.run(); }
运行结果:
staticA
static B
{}A
Constuctor A
{}B
constuctorB
I'm run() in class B
其实在类内部{}只是代表在调用构造函数之前在{}中初始化,static{}只在类加载时调用
new子类的对象时,先调用父类static{}里的东西,再调用子类里的static{},再调用父类{}({}为初始化代码块,在静态块后、构造方法前执行),再调用父类构造方法,再调用子类构造方法
调用子类或者父类的静态方法时,先调用父类的static{}再调用子类的static{}