为什么最终的字段变量不能在Java中分配给空白?

与其他变量一样,我想将最终字段类型变量分配给空白,但初始化是由Java阻塞的。 它的逻辑是什么? 也许我想使用我的变量的默认值? for 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 */ } 

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

改变你的代码

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

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

 static{ myNumber = 0; } 

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

从Java规范 :“如果一个空白的final(§4.12.4)类变量没有被声明它的类的静态初始化器(§8.7)明确赋值(§16.8),那么这是一个编译时错误。 “

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

另外,重要的一点是最终STRICTLY意味着你不能使用赋值运算符。 如果“final”的对象是一个可变对象,那么当然该对象的内容可以在不使用赋值运算符的情况下进行更改。

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