java笔试的一道流程题

public static int t=parentStaticMethod2();
   {
   System.out.println("父类非静态初始化块");   
   }
   static {
   System.out.println("父类静态初始化块");
   }
   public Parent(){
   System.out.println("父类的构造方法");
   }
   public static int parentStaticMethod(){
   System.out.println("父类类的静态方法");
   return 10;   
   }
private static int parentStaticMethod2() {

System.out.println("父类的静态方法2");
return 9;
}
}
public class Child extends Parent{
public static int t=childStaticMethod2();

{
System.out.println("子类非静态初始化块");
}
static{
System.out.println("子类静态初始化块");
}
public Child(){
System.out.println("子类的构造方法");
}
public static int childStaticMethod(){
System.out.println("子类的静态方法");
return 1000;
}
public static int childStaticMethod2(){
System.out.println("子类的静态方法2");
return 1000;
}
public static void main(String[] args) {

        Parent child=new Child();
}

}
结果:
父类的静态方法2
父类静态初始化块
子类的静态方法2
子类静态初始化块
父类非静态初始化块
父类的构造方法
子类非静态初始化块
子类的构造方法

总结:当构造一个子类对象时,先加载父类静态变量和静态代码块,然后是子类静态变量和静态代码块,再然后执行父类非静态代码块和父类构造方法,最后执行子类非静态代码块和子类构造方法。

猜你喜欢

转载自ranina.iteye.com/blog/2264380