































运行结果:
static Insect.x1.initialized
static Insect.x2 initialized
Bettle constructor
i=9,j=0
Bettle.k initialized
k=47
j=37
解释:
Bettle运行需要先加载父类Insect,在加载Insect时先运行所有的Static代码,print()函数建立,但不运行.
这一句会运行:private static int x1 = print("static Insect.x1.initialized");
父类加载完成后加载子类Bettle,同样先初始化所有static代码,于是先运行:private static int x2=print("static Insect.x2 initialized");
然后进入main(),运行System.out.println("Bettle constructor");
再运行Bettle b=new Bettle();创建对象时先新建父类,此时先把所有变量设为初始值(i=9,j=0),然后触发父类constructor.
加载完父类再加载子类,同上先设定义值:private int k=print("Bettle.k initialized");然后运行构造函数