java类的实例化顺序
- 1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
- 2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
- 3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
- 4. 父类构造方法
- 5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
- 6. 子类构造方法
总结:父类静态成员和静态代码块->子类静态成员和静态代码块->父类非静态成员和非静态代码块->父类构造方法->子类非静态成员和非静态代码块->子类构造方法
父类:
1 public class A { 2 3 public static String a=printStr("父类的静态变量"); 4 public String s = printStr("父类的非静态变量"); 5 static { 6 printStr("父类的静态块"); 7 } 8 { 9 printStr("父类的非静态块"); 10 } 11 public A(){ 12 printStr("父类构造方法"); 13 } 14 15 16 public static String printStr(String str){ 17 System.out.println(str); 18 return str; 19 } 20 }
子类:
1 public class B extends A { 2 3 public static String b=printStr("子类的静态变量"); 4 public String st = printStr("子类的非静态变量"); 5 6 static { 7 printStr("子类的静态块"); 8 } 9 { 10 printStr("子类的非静态块"); 11 } 12 public B(){ 13 printStr("子类的构造方法"); 14 } 15 16 //main 17 public static void main(String[] args) { 18 new B(); 19 } 20 }
运行结果:
父类的静态变量
父类的静态块
子类的静态变量
子类的静态块
父类的非静态变量
父类的非静态块
父类构造方法
子类的非静态变量
子类的非静态块
子类的构造方法