现有三个类: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的时候,所做的事或者是包含的操作。请各位详细解释下。
:D
你问的是Java类的加载顺序问题,比如先加载什么静态成员和静态初始化块、先父后子你都可以上在网上有介绍。你主要关心的是为什么会有从2跳到这里[code="java"]public class AA {[/code]// 此处为1。每个类在JVM虚拟机中都有一个指向这个类自身的Class对象。你能明白吗?就像你用类名.class时。。这个是一个指向这个类实例(自己)的静态变量。跳转到这里是在初始化这个静态变量。
因为2和4是静态的,是最先加载的
如果你认真看过tij4的话你会看到大概这样一段话,类级别的属性,方法是初始化最早加载的(我读的是英文版,翻译的不好),其次就是,类内部的静态块(有人称她为匿名构造方法),再次是对应的构造方法了.还有就是加载一个子类是要先加载父类。
mark