类加载顺序
①类加载从上往下执行,依次执行静态的初始化语句和初始化块,而且类加载优先于对象创建。(静态初始化语句和初始化块只加载一次)
②创建本类的对象时,从上往下执行一次非静态的初始化语句和初始化块,然后执行构造函数。
③创建另一个类对象时;先加载另一个类的静态语句和静态初始化块(同样也是第一次才会加载他的静态语句和初始化块,仅执行一次)。然后在加载其它类的非静态的初始化语句和初始化块,然后执行构造器函数。
④静态此语句初始化时可以创建类对象
⑤静态方法可以只加载不调用
class HelloA {public HelloA() {System.out.println("HelloA");}{System.out.println("I'm A class");}static {System.out.println("static A");}
}public class HelloB extends HelloA{public HelloB() {System.out.println("HelloB");}{System.out.println("I'm B class");}static {System.out.println("static B");}public static void main(String[] args) {new HelloB();}
}
其结果如下: