java类的实例化顺序

java类的实例化顺序

1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法
总结:父类静态成员和静态代码块->子类静态成员和静态代码块->父类非静态成员和非静态代码块->父类构造方法->子类非静态成员和非静态代码块->子类构造方法

举个栗子:

父类:
public class A {
     public static String a=printStr("父类的静态变量");
     public String s = printStr("父类的非静态变量");
     static {
         printStr("父类的静态块");
     }
     {
         printStr("父类的非静态块");
     }
     public A(){
         printStr("父类构造方法");
     } 
     public static String printStr(String str){
         System.out.println(str);
         return str;
     }
 }
子类:
 public class B extends A {
     public static String b=printStr("子类的静态变量");
     public String st = printStr("子类的非静态变量");
     static {
         printStr("子类的静态块");
     }
     {
         printStr("子类的非静态块");
     }
     public B(){
         printStr("子类的构造方法");
     } 
     //main
     public static void main(String[] args) {
         new B();
     }
 }
输出:
父类的静态变量
父类的静态块
子类的静态变量
子类的静态块
父类的非静态变量
父类的非静态块
父类构造方法
子类的非静态变量
子类的非静态块
子类的构造方法

你可能感兴趣的:(java,java类的实例化顺序,面试问题)