<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">先看一段代码:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java">package com.ExtendAndInitial;
public class Insect {
private int i = 8;
protected int j;
int k =printInt("k initia");
public static int printInt(String s){
System.out.println(s);
return 77;
}
Insect(){
System.out.println("Insect initializing");
System.out.println("i= "+i);
System.out.println("k= " +k);
System.out.println("j= "+j);
j=99;
}
private static int x1 = printInt("x1 initializing");
}
package com.ExtendAndInitial;
public class Bee extends Insect{
private static int x2=Insect.printInt("x2 is initializing");
public int m=Insect.printInt("m is initializing");
Bee(){
System.out.println("been()");
System.out.println("x2: "+x2);
System.out.println("j: "+j);
}
public static void main(String[] args) {
System.out.println("main() begin");
Bee b =new Bee();
}
}
</pre><p>output:</p><p><pre name="code" class="java">x1 initializing
x2 is initializing
main() begin
k initia
Insect initializing
i= 8
k= 77
j= 0
m is initializing
been()
在Bee上运行Java,所发第一件事是试图访问Bee.main(),于是启用加载器并找出Bee的编译代码(Bee.class文件中),并对他加载过程中,编辑器发现它有一个基类(有extends知)于是编辑器开始加载基类。以此类推,直至所有的基类加载完毕。接下类就是跟基类的static初始化,然后是导出类的static成员。
到此为止,必要的类都加在完毕,对象就可以被创建了。
首先,对象的基本类型都会被设置未默认值,对象引用设为null。
然后,基类的构造器被调用。然后是导出类,默认初始化,构造器,依次执行。
参考 《think in Java》P147
加载器 classloader:http://www.2cto.com/kf/201408/326830.html