gpt4 book ai didi

java - 在java中初始化静态最终变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:30 26 4
gpt4 key购买 nike

public class Test {

private static final int A;

static {
A = 5;
}
}

这种初始化静态最终变量 A 的方法没问题。

public class Test {
private static final int A;

static {
Test.A = 5;
}
}

这种方式会产生编译错误“无法为最终变量'A'赋值。

为什么?

最佳答案

rules for Definite Assignment 指定:

Let C be a class, and let V be a blank static final member field of C, declared in C. Then:

  • V is definitely unassigned (and moreover is not definitely assigned) before the leftmost enum constant, static initializer (§8.7), or static variable initializer of C.

  • V is [un]assigned before an enum constant, static initializer, or static variable initializer of C other than the leftmost iff V is [un]assigned after the preceding enum constant, static initializer, or static variable initializer of C.

通俗地说:

  • 使用静态初始值设定项通过引用其简单名称来初始化 static final 字段是可以的,因为该字段肯定是在初始值设定项之后分配的。实际上,声明静态初始值设定项的类中有上下文,并且您不会通过引用该字段的简单名称来执行任何非法赋值;相反,您满足了必须明确分配该字段的要求。

  • 使用静态初始化程序通过引用其限定名称来初始化 static final 字段是非法的,因为类必须在引用其静态属性时进行初始化(在您的情况下,Test.A必须先初始化,并且在初始化完成后为 A 分配默认值 null)。

关于java - 在java中初始化静态最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49540981/

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