gpt4 book ai didi

java - 在调用父类(super class)型构造函数之前无法引用 "X",其中 x 是最终变量

转载 作者:IT老高 更新时间:2023-10-28 13:52:16 25 4
gpt4 key购买 nike

考虑以下 Java 类声明:

public class Test {

private final int defaultValue = 10;
private int var;

public Test() {
this(defaultValue); // <-- Compiler error: cannot reference defaultValue before supertype constructor has been called.
}

public Test(int i) {
var = i;
}
}

代码将无法编译,编译器会提示我在上面突出显示的行。为什么会发生此错误,最好的解决方法是什么?

最佳答案

代码最初无法编译的原因是因为defaultValueTest类的instance variable,意思是当一个对象Test 类型的创建,defaultValue 的唯一实例也被创建并附加到该特定对象。因此,无法在构造函数中引用 defaultValue,因为它和对象都尚未创建。

解决办法是让final变量static:

public class Test {

private static final int defaultValue = 10;
private int var;

public Test() {
this(defaultValue);
}

public Test(int i) {
var = i;
}
}

通过将变量设为static,它与类本身相关联,而不是与该类的实例相关联,并在Test 的所有实例之间共享。静态变量是在 JVM 首次加载类时创建的。由于在使用类创建实例时已经加载了该类,因此静态变量已准备好使用,因此可以在类中使用,包括构造函数。

引用资料:

关于java - 在调用父类(super class)型构造函数之前无法引用 "X",其中 x 是最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com