Java - 在默认构造函数之前执行的方法

2022-09-01 08:49:37

我正在学习java,偶然发现了以下代码,其中默认构造函数在方法之后执行。

public class ChkCons {

    int var = getVal();

    ChkCons() {
        System.out.println("I'm Default Constructor.");
    }

    public int getVal() {
        System.out.println("I'm in Method.");
        return 10;
    }

    public static void main(String[] args) {

        ChkCons c = new ChkCons();

    }

}

输出:

I'm in Method.
I'm Default Constructor.

谁能解释一下为什么会发生这种情况?

谢谢。


答案 1

实例变量初始化表达式(如)在执行超类构造函数之后但在执行当前类构造函数的主体之前计算。int var = getVal();

因此,在执行构造函数的主体之前调用。getVal()ChkCons


答案 2

构造函数在方法之前调用。方法的执行发生在对象创建过程的一部分之后,其中计算实例变量。从下面的代码中可以更好地理解这一点。

class SuperClass{
    SuperClass(){
        System.out.println("Super constructor");
    }
}
public class ChkCons extends SuperClass{

    int var = getVal();

    ChkCons() {
        System.out.println("I'm Default Constructor.");
    }

    public int getVal() {
        System.out.println("I'm in Method.");
        return 10;
    }

    public static void main(String[] args) {

        ChkCons c = new ChkCons();

    }

}

上面的代码有以下输出

Super constructor
I'm in Method.
I'm Default Constructor.

在这里,编译器自动添加为构造函数中的第一个语句,因此在方法之前调用它。super();ChkCons()getVal()