java问题~~

来源:百度知道 编辑:UC知道 时间:2024/06/05 08:56:31
希望高手指点下,下面代码的详细的加载过程,以及每一步加载所产生的结果如何,谢谢~~

class Insect{
private int i=9;
protected int j;
Insect(){
System.out.println("i= " + i+", j= " + j);
j=39;
}
private static int x1=printInit("static Insect.x1 initialized");
static int printInit(String s){
System.out.println(s);
return 47;
}
}

public class Beetle extends Insect{
private int k=printInit("Beetle.k initialized");
public Beetle(){
System.out.println("k=" + k);
System.out.println("j=" + j);
}
private static int x2=printInit("static Beetle.x2 initialized");
public static void main(String[] argv){
System.out.println("Beetle constructor");
Beetle b=new Beetle();
}
}

静态变量随类加载的时候加载,又因为Beetle extends Insect,即先调用父类,所以运行时,先打印static Insect.x1 initialized,在打印static Beetle.x2 initialized;
其次进入main方法,打印Beetle constructor;
接着,调用构造函数,先父类,使得J为39,后子类,即:i= 9, j= 0,
Beetle()中的K调用printInit();得到47
Beetle()中的j调用父类J,得到39,
如此

运行看下结果!
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
i= 9, j= 0
Beetle.k initialized
k=47
j=39

必然先是父类,后子类
先加载静态变量。static Insect.x1 initialized
static Beetle.x2 initialized
静态方法 main方法!
Beetle b=new Beetle();
先父类构造器,后子类!

先执行父类的static方法,再执行子类的static方法,再执行main,Beetle b=new Beetle();这句话先执行父类的构造方法,再执行子类的构造方法