java中的最终变量

时间:2016-01-27 19:00:40

标签: java variables static initialization final

 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更改。

我是对的还是有其他答案呢?

4 个答案:

答案 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时,编译器会确保它只初始化一次。