第一轮:prt("static Insect.x1 initialized");   //静态变量初始化
prt("static Beetle.x2 initialized");   //同上
   以上两个是初始化,是类一旦载入就初始化的两句,因为静态变量是在类一载入时即初始化,所以也叫类变量。第二轮:第一轮初始化之后,才轮到程序从main这个入口进入:prt("Beetle constructor");  //这个很明显,因为在main函数里,是按照语句的先后来运行的。
new Beetle();//到了这句,开始创建对象beetle,先调用父类构造函数,
所以先输出i = 9, j = 0
之后调用Beetle的构造函数,而调用Beetle()时,会先初始化Beetle类的全局变量——k,而后再运行构造函数中的代码,所以先是:
int k=prt("Beetle.k initialized");
然后:
prt("k="+k);
prt("j="+j);

解决方案 »

  1.   

    运行肯定是从main开始的,其实说明白点就是在运行第一句时先把所有的静态成员变量都初始化也就是在
    prt("Beetle constructor");之前,1. static int x1=prt("static Insect.x1 initialized"); 但用到了成员方法,所以调用prt
    2.子类静态成员变量初始化  也调用了继承父类的成员方法 prt
    3.运行主程序中 prt("Beetle constructor");
    4.后面的你就应该懂了吧,int i=9; int j;(默认为0) 构造父类 i=9 ,j=0 输出完后j=39
    5.int k=prt("Beetle.k initialized"); (输出字串后,从prt return 47放入k中)
    6.构造子类 
    7.主程序中创建实例b
     以上是我的理解,希望对你有帮助