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条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog