gpt4 book ai didi

java - 在 Java 中使用另一个构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:24 25 4
gpt4 key购买 nike

考虑:

    int a = 0;
int b = 3;

//Constructor 1
public ClassName (int a) {
this(a, b); //Error
//new ClassName(a, b) //No error
}

//Constructor 2
public ClassName (int a, int b) {
this.a = a;
this.b = b;
}

第一个问题:

我收到一条错误消息“b should be static”。为什么我不能以这种方式使用 b 的默认值 (3)?

第二个问题:

在第一个构造函数中,如果我使用注释掉的部分,我不会得到错误。这是一种可接受的用法吗?

最佳答案

the JLS, Section 8.8.7.1 禁止在显式构造函数调用中使用实例变量.

An explicit constructor invocation statement in a constructor body may not refer to any instance variables or instance methods or inner classes declared in this class or any superclass, or use this or super in any expression; otherwise, a compile-time error occurs.

This prohibition on using the current instance explains why an explicit constructor invocation statement is deemed to occur in a static context (§8.1.3).

您引用了实例变量b。编译器没有在 a 上引发此错误,因为它是一个局部变量,它隐藏了实例变量 a

“静态上下文”可能是您的 IDE 建议将 b 设为静态的原因,以便可以引用它。这说得通;对象的 ClassName 部分尚未构建。将 b 的用法替换为其他内容,例如 static 常量或文字 int 值。

要回答您的其他问题,键入 new ClassName(a, b) 不是错误,因为此时已经构造了该实例,并且您正在创建一个单独的、不相关的 ClassName 对象。

关于java - 在 Java 中使用另一个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33155094/

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