日期:2014-05-20  浏览次数:20723 次

【java调试的执行顺序---可能你也不曾注意的细节】
三个类:AA类,BB类,CC类。
代码如下:
public class AA { // 此处为1
public static int a=10; //此处为2
public int b=20; //此处为6
public AA(){}; //此处为7
}
public class BB extends AA { //此处为3
public static int x=30; //此处为4
public int y=40; //此处为8
public BB(){}; //此处为9
}
public class CC {
public static void main(String[] args) {
BB b=new BB();//此处为5
}
}

在5那里设断点,按F5调试,执行顺序为:5→2→1→4→3→5→9→7→6→8→5
请问从2至1的原因?以及在执行1的时候,所做的事或者是包含的操作。请各位详细解释下。
【在回贴时,您最好自已尝试去调试下,您会发现这个问题你以前可能从未碰到过】
【代码里已经有显示的无参构造方法了,请注意。】



------解决方案--------------------
这涉及到子类和父类初始化的顺序!
2--》1

因为A是B的父类,所以先初始化A类。
------解决方案--------------------
类初始化时先初始化静态变量,初始化静态变量之后加载类,实例化类时执行子类构造函数先执行父类构造函数,再为变量赋值。