class A {
public A() {
System.out.println("class A");
}
{ System.out.println("I'm A class"); }
static { System.out.println("class A static"); }
}
public class B extends A {
public B() {
System.out.println("class B");
}
{ System.out.println("I'm B class"); }
static { System.out.println("class B static"); }
public static void main(String[] args) {
new B();
class A static class B static I'm A class class A I'm B class class B
当new 一个对象时
如果有静态代码块
系统会自动的帮你最先执行静态代码块
如果A继承了B 并且A,B都有静态代码块
当你new A()时,
系统会自动的先去执行B的静态代码块在执行A的静态代码块
然后假设B还有构造代码块,那么再执行完A,B的静态代码块后
会再去执行B的构造代码块,然后在执行B的构造方法
然后在执行A的构造代码块,然后在执行A的构造方法