java 变量初始化的时间:在构造函数代码执行之前还是之后?[副本]

j8yoct9x  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(161)

此问题已在此处有答案

Are fields initialized before constructor code is run in Java?(5个答案)
12小时前关闭。
想想看

class SomeClass {
    private int fieldA;
    private int fieldB = fieldA + 1;
    SomeClass(int fieldA) {
        this.fieldA = fieldA;
    }
}

假设我这样调用构造函数:new SomeClass(5)fieldB的值是多少?它会在构造函数代码执行后被初始化吗(所以fieldB等于6)?或者它会在构造函数代码之前被初始化(所以fieldB等于1)?

2vuwiymt

2vuwiymt1#

这些字段将在执行 * 构造函数代码之前 * 被初始化。因此,由于fieldA默认为零(就像int一样),fieldB将等于1。这里有一个你可以运行的片段

public class SomeClass {
    private int fieldA;
    private int fieldB = fieldA + 1;
    SomeClass(int fieldA) {
        this.fieldA = fieldA;
    }
    public static void main(String args[]) {
      SomeClass instance = new SomeClass(5);
      // ↓ prints SomeClass[fieldA=5, fieldB=1]
      System.out.println(instance);
    }
    @Override
    public String toString() {
        return String.format("SomeClass[fieldA=%d, fieldB=%d]", fieldA, fieldB);
    }
}

相关问题