有如下代码:
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
结果总结:
(1)整体顺序
静态代码块 > 非静态代码块 > 构造函数
(2)继承类顺序
子类 > 父类
说明:在一个类中的顺序是:静态代码块>非静态代码块>构造器。但是如果有子类存在,这优先从父类的静态代码块开始加载,等所有子类的代码块加载完毕,才开始加载非静态代码块和构造器(一起记载),如果有子类存在,则优先加载父类的(非静态代码块和构造器),然后加载子类的(非静态代码块和构造器)。