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;
   //...
}

会做的。