class Insect{ 
private int i=9; 
protected int j; 
Insect(){ 
System.out.println("i="+i+",j="+j); 
j=37; 

private static int x1=print("static Insect.x1.initialized"); 
static int print(String s) 

System.out.println(s); 
return 47; 

} public class Bettle extends Insect{ 
private int k=print("Bettle.k initialized"); 
public Bettle(){ 
System.out.println("k="+k); 
System.out.println("j="+j); 

private static int x2=print("static Insect.x2 initialized"); 
public static void main(String [] args) 

System.out.println("Bettle constructor"); 
Bettle b=new Bettle(); 

} 谁能帮忙详细讲解一下它的执行顺序及原理,顺便给标上执行顺序,麻烦各位了!

解决方案 »

  1.   

    父类中的静态变量和静态代码块 ---->子类中的静态变量和静态代码块
    ----->父类中的非静态变量和构造函数---->子类中的非静态变量和构造函数
    原理:作为类先初始化公共属性和公共初始化 然后才是父类初始化和子类初始化
      

  2.   

    这样分析对吧结果:
    static Insect.x1.initialized (父类Insect的static变量)
    static Insect.x2 initialized(子类Bettle的static变量)
    Bettle constructor (子类Bettle的static代码块)
    i=9,j=0 (父类Insect的构造函数)
    Bettle.k initialized (子类Bettle的非静态变量)
    k=47 (子类Bettle构造函数)
    j=37 (子类Bettle构造函数)
      

  3.   

    static Insect.x1.initialized static Insect.x2 initialized Bettle constructor 
    i=9,j=0 
    Bettle.k initialized k=47 
    j=37
      

  4.   

    运行结果如下:
    static Insect.x1.initialized
    static Insect.x2 initialized
    Bettle constructor
    i=9,j=0
    Bettle.k initialized
    k=47
    j=37