gpt4 book ai didi

java - 静态修饰符和静态 block 之间的区别

转载 作者:IT老高 更新时间:2023-10-28 11:40:21 24 4
gpt4 key购买 nike

有人向我解释以下两种说法的区别吗?

static 代码块初始化的 static final 变量:

private static final String foo;
static { foo = "foo"; }

一个由赋值初始化的static final变量:

private static final String foo = "foo";

最佳答案

在此示例中,有一个 细微的 差异 - 在您的第一个示例中,foo 未确定为编译时常量,因此它不能是用作 switch block 中的案例(并且不会内联到其他代码中);在你的第二个例子中,它是。比如:

switch (args[0]) {
case foo:
System.out.println("Yes");
break;
}

foo 被认为是一个常量表达式时有效,但当它“只是”一个静态最终变量时则无效。

然而,静态初始化 block 通常在您有更复杂的初始化代码时使用 - 例如填充集合。

初始化的时间JLS 12.4.2 中描述。 ;任何被视为编译时常量的静态最终字段首先初始化(步骤 6),然后运行初始化程序(步骤 9);所有初始化程序(无论是字段初始化程序还是静态初始化程序)都按文本顺序运行。

关于java - 静态修饰符和静态 block 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29691513/

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