1 package demo; 2 //父类 3 public class FatherClass { 4 5 private static String strFather="父类静态属性----1"; 6 7 static{ 8 System.out.println("父类静态代码块----1"); 9 } 10 11 { 12 System.out.println("父类构造代码块----3"); 13 } 14 15 public FatherClass(){ 16 System.out.println("父类构造器----4"); 17 } 18 }
1 package demo; 2 //子类 3 public class ChildClass extends FatherClass{ 4 5 private static String childFather="子类静态属性----2"; 6 7 static{ 8 System.out.println("子类静态代码块----2"); 9 } 10 11 { 12 System.out.println("子类构造代码块----5"); 13 } 14 15 public ChildClass(){ 16 System.out.println("子类构造器----6"); 17 } 18 }
1 package demo; 2 3 public class ShunXu { 4 /** 5 * 父类,静态属性,静态代码块,构造代码块,构造函数, 6 * 子类,静态属性,静态代码块,构造代码块,构造函数 7 * 的执行顺序 8 */ 9 public static void main(String[] args) { 10 ChildClass child = new ChildClass(); 11 } 12 /** 13 * 父类静态代码块----1 14 * 子类静态代码块----2 15 * 父类构造代码块----3 16 * 父类构造器----4 17 * 子类构造代码块----5 18 * 子类构造器----6 19 */ 20 }
分析结果可以得到如下加载执行顺序结论:
1.加载父类的静态属性和静态代码块。
2.加载子类的静态属性和静态代码块。
3.加载父类的非静态属性和非静态代码块。
4.加载父类的构造方法。
5.加载子类的非静态属性和非静态代码块。
6.加载子类的构造方法。
注:
1.静态属性和静态代码块是在类加载的时候就加载执行,执行顺序与代码顺序相同。
2.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。
时间: 2024-10-12 17:01:56