初始化顺序

三个原则,递减的优先级:

  静态对象(变量)优先于非静态对象(变量)初始化,其中静态只初始化一次,非静态可能初始化多次

  父类优先于子类进行初始化

  按照成员变量定义的顺序进行初始化,即使变量定义散布于方法定义之中,他们依然在任何方法(包括构造函数)被调用之前被初始化

从先到后分别是:

  父类static初始化块

  子类static初始化块

  父类普通初始化块

  父类构造器

  子类普通初始化块

  子类构造器

即初始化块始终比构造器先执行

初始化过程: 
1. 初始化父类中的静态成员变量和静态代码块 ; 
2. 初始化子类中的静态成员变量和静态代码块 ; 
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法; 
原文地址:https://www.cnblogs.com/zawjdbb/p/6898982.html