类初始化时候的加载顺序是首先加载父类的静态代码,静态代码的加载顺序从上向下执行,然后加载子类的静态代码,同样从上向下执行。

在初始化实例的时候,首先初始化时会先初始化父类代码块,如果有多个代码块则从上向下执行,然后加载父类的构造函数。接着初始化子类的代码块,如果有多个代码块则从上向下执行,然后加载子类的构造函数。

下面是一个例子,当 new Sub() 时加载的顺序便是 1、2、3、4、5、6、7、8、9、10.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Parent{
    public static String pStaticStr = "2";

    static { System.out.println(1); }
    static { System.out.println(pStaticStr); }
    { System.out.println(5); }
    { System.out.println(6); }

    public Parent(){ System.out.println(7); }
}


class Sub extends Parent{
    public static String sStaticStr = "4";

    static { System.out.println(3); }
    static{ System.out.println(sStaticStr); }
    { System.out.println(8); }
    { System.out.println(9); }

    public Sub(){ System.out.println(10); }
}