class Test {
public static final int x;
public static void main (String[] args) {
Test.x = 42;
}
}
我已经声明了一个静态的最终变量,当我编译它时会出现以下错误。
error: cannot assign a value to final variable x
Test.x = 42;
我想我已达成解决方案,但我想检查一下我是否正确?
我知道如果未初始化静态变量,则提供默认值。因为它是一个静态的最终int变量,所以稍后将赋值为0.我试图将值更改为42,这是不可能的,因为变量是最终的,不能从0更改。
我是对的还是有其他答案呢?
答案 0 :(得分:2)
final
成员只能直接在其初始化或构造函数中分配。由于main()
既不是这些内容,也不能为final
成员分配值。它已经"最终"到代码执行时。
由于此final
成员为static
,除非您在声明中指定值,否则您必须在静态初始值设定项中指定其值。例如:
class Test {
public static final int x;
static {
x = 42;
}
}
答案 1 :(得分:0)
最终变量只能在java中初始化一次。
非静态最终变量可以在构造函数中初始化一次,
和静态最终变量可以在静态块中初始化一次,
除了在宣言中初始化它们。
答案 2 :(得分:0)
class Test
{
public static final int x = 42;
//...
}
会这样做。
答案 3 :(得分:-1)
你几乎是对的。只有注释,所有实例变量都使用默认值初始化,无论是静态还是非静态。标记为final
时,编译器会确保它只初始化一次。