一个来自tij第6章在继承关系中类的加载顺序的例子。
         
 1package ch6;
 2
 3class Insect{
 4    private int k2=print("Insect.k2 initialized");
 5    private int i=9;
 6    protected int j;
 7    Insect(){
 8        System.out.println("i="+i+".j="+j);
 9        j=39;
10    }

11    private static int x1=print("static insect.x1 initialized");
12    
13    static int print(String s){
14        System.out.println(s);
15        return 47;
16    }

17}

18
19public class Beetle extends Insect{
20    
21    private int k=print("Beetle.k initialized");
22    
23    public Beetle(){
24        System.out.println("K="+k);
25        System.out.println("j="+j);
26    }

27    
28    private static int x2=print("statci Beetle.x2 initalized");
29    
30    public static void main(String[] args){
31        
32        System.out.println("Beetle constructor");
33        Beetle b=new Beetle();
34    }

35}
它的运行结果如下:

static insect.x1 initialized
statci Beetle.x2 initalized
Beetle constructor
Insect.k2 initialized
i=9.j=0
Beetle.k initialized
K=47
j=39
Press any key to continue...

其中static成员在Beetle构造器还没有调用时就加载,刚刚才知道这点,然后是调用基类构造方法(先成员初始化,再构造方法),然后是导出类。以前一直以为顺序是:基类的成员初始化—>导出类成员初始化-->基类,导出类构造方法。但事实是:基类的成员初始化—>基类构造方法—>导出类成员初始化-->导出类构造方法。