父类,子类,静态属性,静态代码块,构造代码块,构造函数,执行顺序

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

 

posted @ 2017-09-10 17:33  溪山晴雪  阅读(400)  评论(0编辑  收藏  举报