如题:
import static net.mindview.util.Print.*;class Insect {
  private int i = 9;
  protected int j;
  Insect() {
    print("i = " + i + ", j = " + j);
    j = 39;
  }
  private static int x1 =
    printInit("static Insect.x1 initialized");
  static int printInit(String s) {
    print(s);
    return 47;
  }
}public class Beetle extends Insect {
  private int k = printInit("Beetle.k initialized");
  public Beetle() {
    print("k = " + k);
    print("j = " + j);
  }
  private static int x2 =
    printInit("static Beetle.x2 initialized");
  public static void main(String[] args) {
    print("Beetle constructor");
    Beetle b = new Beetle();
  }
}

解决方案 »

  1.   

    static Insect.x1 initialized
    static Beetle.x2 initialized
    Beetle.k initialized
    i=9,j=0
    k=47,j=0
      

  2.   

    static Insect.x1 initialized
     static Beetle.x2 initialized
     i=9,j=0
     Beetle.k initialized
     k=47,j=0
      

  3.   

    原理是因为主函数在Beetle类中,虚拟器要加载他而他有继承Insect,所以就必须先加载Insect
    虚拟器加载类会执行静态代码,所以加载Insect输入  static Insect.x1 initialized
    加载 Beetle 输出 Beetle.k initialized
    接着会创建B对象,首先要创建父对象因此执行Insect的构造方法,输入i=9,j=0
    在执行B的构造方法方法前会先初始化类变量,就有了Beetle.k initialized
    构造方法结束k=47,j=0
      

  4.   

    原理是因为主函数在Beetle类中,虚拟器要加载他而他有继承Insect,所以就必须先加载Insect
    虚拟器加载类会执行静态代码,所以加载Insect输入  static Insect.x1 initialized
    加载 Beetle 输出 Beetle.k initialized
    接着会创建B对象,首先要创建父对象因此执行Insect的构造方法,输入i=9,j=0
    在执行B的构造方法方法前会先初始化类变量,就有了Beetle.k initialized
    构造方法结束k=47,j=0
    谢谢~