Init块与构造函数链接

时间:2015-04-11 13:03:18

标签: java

在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();
    }
}

1 个答案:

答案 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构造函数,其余行将被执行。