xuanmulingyun 2011-05-20 21:06
浏览 203
已采纳

帮忙解释一下。。

class ABC{
static{
System.out.print("1");
}
public ABC(){
System.out.print("2");
}
}
class BCD extends ABC{
static {
System.out.print("a");
}
public BCD(){
System.out.print("b");
}
}
public class cd {
public static void main(String [] args){
@SuppressWarnings("unused")
ABC ab=new BCD(); //
System.out.println("********");
ab=new BCD(); //b
}
}

这段代码的整个执行顺序是怎么的。。。。

  • 写回答

2条回答 默认 最新

  • fmjsjx 2011-05-20 21:56
    关注

    简单讲一下java的ClassLoad机制:
    1. 所有的静态代码都在类加载(就是JVM第一次使用该类,需要把该类的class加载入内存中)时执行,顺序从上至下;
    2. 所有非静态代码都在对象(类)被实例化时执行,非静态代码段先执行,然后是构造器;
    3. 在对象(类)有继承关系时,父类总是先于子类执行。

    好了,在了解了以上3个原则后,对于Java代码的执行顺序就比较清楚了。
    代码先出现ABC的声明,所以先加载ABC: -->打印“1”;
    然后实例化BCD,加载BCD: -->打印 “a”;
    由于BCD继承自ABC,所以先执行ABC: -->打印“2”;
    最后执行BCD: -->打印“b”;
    又实例化一次BCD,由于已经加载了,所以不再执行静态代码: -->打印“2”打印“b”。
    所以最后应该输出:
    1a2b


    2b

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路