我有以下代码:
我得到的输出是:
A 静态初始化块 B 静态初始化块 A 非静态初始化块 测试 B 非静态初始化块 B 构造函数
但我希望它是:
A 静态初始化块 B 静态初始化块 A 非静态初始化块 B 非静态初始化块 测试 B 构造函数
因为据我所知,初始化块在构造函数之前加载。
我已经在 Google 和 Stackoverflow 上浏览了答案,但没有成功。
任何澄清都将不胜感激!
public class Demo{
public static void main(String[] args) {
new B();
}
}
class A {
static {
System.out.println("A static initializer block");
}
static void methodOfA() {
System.out.println("A static method");
}
{
System.out.println("A non-static initializer block");
}
public A() {
System.out.println("A constructor");
}
public A(String a) {
System.out.println(a);
}
}
class B extends A {
static {
System.out.println("B static initializer block");
}
static void methodOfB() {
System.out.println("B static method");
}
{
System.out.println("B non-static initializer block");
}
public B() {
super("test");
System.out.println("B constructor");
}
}
我得到的输出是:
A 静态初始化块 B 静态初始化块 A 非静态初始化块 测试 B 非静态初始化块 B 构造函数
但我希望它是:
A 静态初始化块 B 静态初始化块 A 非静态初始化块 B 非静态初始化块 测试 B 构造函数
因为据我所知,初始化块在构造函数之前加载。
我已经在 Google 和 Stackoverflow 上浏览了答案,但没有成功。
任何澄清都将不胜感激!
A
必须在B
之前完全初始化,因此可以合理地假设A
构造函数在B
的初始化程序之前被调用。 - Smutje