我有我无法理解的代码,它如何产生该输出。这是下面的代码 -
代码:
class Bird {
{ System.out.print("b1 "); }
public Bird() { System.out.print("b2 "); }
}
class Raptor extends Bird {
static { System.out.print("r1 "); }
public Raptor() { System.out.print("r2 "); }
{ System.out.print("r3 "); }
static { System.out.print("r4 "); }
}
class Hawk extends Raptor {
public static void main(String[] args) {
System.out.print("pre ");
new Hawk();
System.out.println("hawk ");
}
}
输出:
r1 r4 pre b1 b2 r3 r2 hawk
问题:
我关于此代码的具体问题是 -
- 当
Hawk
类被安装时,它会导致Raptor
类被安装,因此静态代码块首先运行。但是,在打印之前,静态代码应该跟在非静态代码之后pre
。不是吗? - 那些非静态初始化块似乎实际上就像构造函数一样。那么,这些可以用作常规编程中的构造函数吗?