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的时候,所做的事或者是包含的操作。请各位详细解释下。

料青山看我应如是
浏览 475回答 3
3回答

炎炎设计

:D 你问的是Java类的加载顺序问题,比如先加载什么静态成员和静态初始化块、先父后子你都可以上在网上有介绍。你主要关心的是为什么会有从2跳到这里[code="java"]public class AA {[/code]// 此处为1。每个类在JVM虚拟机中都有一个指向这个类自身的Class对象。你能明白吗?就像你用类名.class时。。这个是一个指向这个类实例(自己)的静态变量。跳转到这里是在初始化这个静态变量。

ibeautiful

因为2和4是静态的,是最先加载的

杨__羊羊

如果你认真看过tij4的话你会看到大概这样一段话,类级别的属性,方法是初始化最早加载的(我读的是英文版,翻译的不好),其次就是,类内部的静态块(有人称她为匿名构造方法),再次是对应的构造方法了.还有就是加载一个子类是要先加载父类。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java