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