在Java中首先运行init块或this()
(在构造函数链接的情况下)?
我搜索并发现this()
的优先级高于构造函数链接,但是当我尝试运行输出时我是不同的
class Init_block {
{
//init block
System.out.println("This is init block");
}
Init_block() {
this(10);
System.out.println("First constructor");
}
Init_block(int a) {
System.out.println("Second constructor" + " " + a);
}
public static void main(String argv[]) {
new Init_block();
}
}
答案 0 :(得分:1)
每当调用子类构造函数时,所有基类都将被加载首先从直接基类开始直到Object类。在将所有类加载到Object
类之后,构造函数将从Object
类开始执行到child class
。
但在执行子类构造函数之前,init块将首先执行子类。
如果存在多个init块,则它们将按照出现的顺序执行。 执行完所有init块后,编译器最终会执行子类的构造函数。
在你的情况下
首先调用Init_block()
,但首先执行Object
类构造函数。
然后Init_block class's init block
将被执行。
执行init块后,JVM将执行构造函数。在构造函数中,您将参数化构造函数称为this(10)
,因此jvm将执行
Init_block(int a)
执行参数化构造函数控件后,将返回no-arg构造函数,其余行将被执行。