为了账号安全,请及时绑定邮箱和手机立即绑定

Java调试

Java调试

料青山看我应如是 2019-03-20 18:15:08
现有三个类:AA类,BB类,CC类。代码如下:public class AA {// 此处为1 public static int a=10;//此处为2public int b=20; //此处为6public AA(){}; //此处为7}public class BB extends AA {//此处为3 public static int x=30;//此处为4public int y=40; //此处为8public 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的时候,所做的事或者是包含的操作。请各位详细解释下。
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-04-26
?
ibeautiful

TA贡献1993条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-04-26
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-04-26
  • 3 回答
  • 0 关注
  • 474 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信