gpt4 book ai didi

java - 静态字段无法在静态 block 中前向引用,但可以赋值

转载 作者:行者123 更新时间:2023-12-02 09:08:42 25 4
gpt4 key购买 nike

看一下测试用例:

public class StaticFieldTest {
public static int A= 1;
static {
A=2;
NAME="AAA";
// System.out.println(NAME); // Can't forward reference
}
public static String NAME = "Archer";

public static void main(String[] args) {
System.out.println(NAME);
}
}

输出是Archer。显然 NAME="AAA" 很乏味。为什么Java允许这种写法?

最佳答案

他们Java Language Specification表明这是“在编译时捕获循环或其他格式错误的初始化”。

NAME = AAA; 可以编译的原因是 NAME 位于语句的左侧。

<小时/>

8.3.2.3. Restrictions on the use of Fields during Initialization

仅当成员是类或接口(interface) C 的实例(分别是静态)字段并且满足以下所有条件时,成员声明才需要在使用之前以文本形式出现:

  • 该用法发生在 C 的实例(分别为静态)变量初始值设定项或 C 的实例(分别为静态)初始值设定项中。

  • 用法不在作业的左侧。

  • 通过一个简单的名称来使用。

  • C 是包含用法的最内部类或接口(interface)。

关于java - 静态字段无法在静态 block 中前向引用,但可以赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332217/

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