基本原则:
1)静态对象(变量)优先于非静态变量对象初始化,其中,静态对象(变量)只初始化一次,非静态对象可能多次初始化;
2)父类优先于子类进行初始化;
3)按照成员变量定义顺序进行初始化。即使变量定义散布于方法定义中,他们依然在任意方法被调用前进行初始化
代码实例:
class B { static { System.out.println("父类静态代码块"); } { System.out.println("父类非静态代码块"); } public B() { System.out.println("父类构造器"); } } public class A extends B{ static { System.out.println("子类静态代码块"); } { System.out.println("子类非静态代码块"); } public A() { System.out.println("子类构造器"); } public static void main(String[] args) { new A(); } }
运行结果:
父类静态代码块
子类静态代码块
父类非静态代码块
父类构造器
子类非静态代码块
子类构造器