【问题标题】:Final variable in java [duplicate]java中的最终变量[重复]
【发布时间】:2016-01-27 19:00:40
【问题描述】:
 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;    

我想我已经找到了解决方案,但我想检查一下我是否正确?

我知道如果未初始化静态变量,则会提供默认值。因为它是一个静态的 final int 变量,它会被赋值为 0。稍后,我尝试将值更改为 42,这是不可能的,因为该变量是 final 并且不能从 0 更改。

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

【问题讨论】:

  • final 变量初始化后不能更改。
  • 错误准确地告诉你出了什么问题。
  • 这个问题你可以通过阅读java网站上的final关键字得到答案。

标签: java variables static initialization final


【解决方案1】:

final 成员只能在其初始化或构造函数中直接赋值。由于main() 不是这些东西,它不能为final 成员赋值。到代码执行时,它已经“最终”了。

由于这个final 成员是static,除非您在声明中分配值,否则您必须在静态初始化程序中分配它的值。例如:

class Test {
    public static final int x;

    static {
        x = 42;
    }
}

【讨论】:

    【解决方案2】:

    final变量在java中只能初始化一次。

    非静态最终变量可以在构造函数中初始化一次,

    静态最终变量可以在静态块中初始化一次,

    除了在声明时初始化它们。

    【讨论】:

      【解决方案3】:
      class Test 
      {
         public static final int x = 42;
         //...
      }
      

      会做的。

      【讨论】:

        【解决方案4】:

        你几乎是正确的。唯一的评论是,所有实例变量都使用默认值初始化,无论是静态的还是非静态的。当你将它标记为final 时,编译器会确保它只被初始化一次。

        【讨论】:

          猜你喜欢
          • 2011-11-25
          • 2020-04-23
          • 2015-08-12
          • 2018-09-15
          • 2013-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多