为什么最终的字段变量不能在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”的对象是一个可变对象,那么当然该对象的内容可以在不使用赋值运算符的情况下进行更改。
编辑:我认为最终变量必须保证在程序的某一点初始化,这就是为什么你通常在声明初始化它