gpt4 book ai didi

java - 为什么不给静态最终变量赋予默认值?

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:54 24 4
gpt4 key购买 nike

为什么static final 变量没有被赋予默认值,而static(但非final 变量被赋予默认值)。

在 Java 中实现这种行为的原因是什么?

最佳答案

当然,static final 变量会被赋予默认值,例如:

class Test {
static final int x;
static {
printX();
x = 42;
printX();
}

static void printX() {
System.out.println("Here x is "+x);
}
public static void main(String[] args) { }
}

输出是:

Here x is 0
Here x is 42

如果 x 未被赋予默认值 0,如 JLS 4.12.5 中指定的那样,输出将取决于所使用的 JVM。你可能会看到一些随机数。

更新:既然我们已经演示了静态最终字段确实获得了默认值,您可能想知道为什么默认值不够用。这个问题没有好的答案,除了显而易见的答案:"The spec says so"。 .摘自 8.3.1.2:

It is a compile-time error if a blank final (§4.12.4) class variable is not definitely assigned (§16.8) by a static initializer (§8.7) of the class in which it is declared.

我们只能猜测这种限制背后的动机,但我认为这是为了让程序更容易理解。如果您想将变量设置为 0,那么显式地执行会更清楚。

关于java - 为什么不给静态最终变量赋予默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10381551/

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