2

像其他变量一样,我想将最终字段类型变量分配给空白,但初始化被 Java 阻塞。它的逻辑是什么?也许我想使用我的变量的默认值?对于 int = 0,string = null boolean = false 等...

public class Hello {

static final int myNumber; /* it is giving "The blank final field myNumber 
                                may not have been initialized" error in Eclipse */
}
4

5 回答 5

4

在 Java 中,将final关键字与static变量一起使用后,必须在声明点定义值。你必须赋予它一些价值并坚持下去。

于 2012-11-24T05:46:48.613 回答
3

最终变量只能通过初始化程序或赋值语句初始化一次。它不需要在声明时初始化:这称为“空白最终”变量。

更改您的代码

public class Hello {

final int myNumber; 
 public Hello(int num){
 this.myNumber = num;
}

}

对于静态最终变量,使用静态块进行初始化

static{
        myNumber = 0;
    }
于 2012-11-24T05:47:33.170 回答
1

来自Java 规范:“如果声明它的类的静态初始化程序(第 8.7 节)未明确分配(第 16.8 节)空白最终(第 4.12.4 节)类变量,则这是编译时错误。 "

于 2012-11-24T05:58:42.030 回答
0

当您将“final”修饰符与变量一起使用时,您必须对其进行初始化,因为这是您唯一允许在其上使用赋值运算符(如果将其留空,则可以初始化一次)(“=”) . 就像 parker.sikand 说的那样,如果你之后尝试为它分配一个值,你会得到一个错误。

另外,重要的一点是 final STRICTLY 意味着您不能使用赋值运算符。如果“最终”对象是可变对象,那么该对象的内容当然可以更改,而无需使用赋值运算符。

编辑:我相信最终变量必须保证在程序的某个点被初始化,这就是为什么你通常在声明时初始化它

于 2012-11-24T05:49:47.347 回答
0

Eclipse 2019-09 现在为此提出了一个快速修复:

初始化 ' final' 字段

现在提供了一个 Java 快速修复来初始化final类构造函数中未初始化的字段。

https://www.eclipse.org/eclipse/news/4.13/images/finalquickfix1.png

该修复会将 a 初始化String为空字符串,将数字基类型初始化为 0,对于类字段,如果可用,则使用其默认构造函数初始化它们,如果不存在默认构造函数,则使用 null 初始化它们。

https://www.eclipse.org/eclipse/news/4.13/images/finalquickfix2.png

于 2019-09-21T22:19:52.143 回答