先看一段代码:
public class HelloB extends HelloA{ public HelloB(){ System.out.println("HelloB"); } { System.out.println("I am B class"); } static{ System.out.println("static B"); } public static void main(String[] args) { new HelloB(); } } class HelloA{ public HelloA(){ System.out.println("HelloA"); } { System.out.println("I am A class"); } static { System.out.println("static A"); } } 请问输出的结果是啥?答案:
static A static B I am A class HelloA I am B class HelloB
java程序的初始化一般遵循以下三个原则,
①:静态对象(变量)优于非静态对象(变量),其中,静态变量只初始化一次,而非静态对象(变量)初始化多次。
②:父类优先于子类进行初始化。
③:按照成员变量定义顺序进行初始化,及时变量定义散布于块之中,他们依然在任何方法(包括构造方法)被调用之前初始化。
一般的,执行顺序如下:
父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造方法、
子类非静态变量、子类非静态代码块、子类构造方法。