在java中,测试以上三部分的执行顺序。现有以下两个类:
HelloA
public class HelloA {
//构造方法
public HelloA() {
System.out.println("HelloA constructor");
}
//代码块
{
System.out.println("HelloA Code Block");
}
//静态代码块
static {
System.out.println("HelloA Static Code Block");
}
}
HelloB
public class HelloB extends HelloA {
//构造方法
public HelloB() {
System.out.println("HelloB constructor");
}
//代码块
{
System.out.println("HelloB Code Block");
}
//静态代码块
static {
System.out.println("HelloB Static Code Block");
}
}
测试方法:
new HelloA();
此时可以看到控制台输出信息如下:
HelloA Static Code Block
HelloA Code Block
HelloA constructor
由此可以看出,在单个类中初始化顺序为:静态代码块、代码块、构造函数。
测试方法:
new HelloB();
此时可以看到控制台输出信息如下:
HelloA Static Code Block
HelloB Static Code Block
HelloA Code Block
HelloA constructor
HelloB Code Block
HelloB constructor
当存在继承关系时,先执行静态代码块(先基类,后子类),接着执行基类的代码块和构造方法,最后执行子类的代码块和构造方法。