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.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。