Java 编译时错误“;“最终变量未初始化”;
我遇到了一个问题,在尝试一些代码片段时,我遇到了一个代码错误Java 编译时错误“;“最终变量未初始化”;,java,constructor,final,Java,Constructor,Final,我遇到了一个问题,在尝试一些代码片段时,我遇到了一个代码错误 class O { final int i; O() { i=10; } O(int j)// error here as THE BLANK FINAL FIELD i IS NOT INITIALIZED { j=20; System.out.println(j); } } class Manager3 { public
class O
{
final int i;
O()
{
i=10;
}
O(int j)// error here as THE BLANK FINAL FIELD i IS NOT INITIALIZED
{
j=20;
System.out.println(j);
}
}
class Manager3
{
public static void main(final String[] args)
{
O n1=new O();
//O n2=new O(10);
//n1.i=20;
//System.out.println(j1.i);
}
}
但是如果我用参数注释构造函数,我不会得到任何错误
我的问题是,为什么我把构造函数都放在代码中时会出现编译时错误,为什么我删除参数化构造函数时不会出现任何错误
我知道我们必须初始化我的最后一个变量,但我正在构造函数中初始化它,因此,如果我编写以下代码:-
class O
{
final int i;
O()
{
i=10;
}
}
class Manager3
{
public static void main(final String[] args)
{
O n1=new O();
}
}
所有这些都工作正常,代码正在编译
我的问题是,如果我引入另一个构造函数,问题是什么。甚至错误也在我写参数化cons的那一行
我了解JAVA,但我对这段代码感到困惑
final int i;
您已将i
定义为final
。只能在构造函数中为最终变量赋值
O(int j)// error here as THE BLANK FINAL FIELD i IS NOT INITIALIZED
{
j=20;
System.out.println(j);
}
这里您没有为i
赋值。如果有人使用此构造函数(带参数的构造函数)创建对象,i
值将不会被赋值
如何解决此问题?
正如您所说的,您必须对该构造函数进行注释(或)在该构造函数中分配
i
值,就像在其他构造函数中一样。必须在声明时初始化final
变量,或将其分配给构造函数体中的值。
如果不初始化final
变量,则会出现编译器错误
如果调用第二个构造函数,变量永远不会被赋值。O(int j){
O(int j){
this(); // <----- you can add this line.
j=20;
System.out.println(j);
}
this();//“i”是一个实例最终变量,因此我们需要在我定义的每个构造函数中初始化它。你是对的,我期望的真正答案是“i”是类变量,因此我需要在我定义的每个构造函数中初始化它。@Ali:1)我是实例变量,而不是类变量。2)所有实例变量都不需要在构造函数中赋值,除非它们是final并且尚未赋值。@Ali:如果从i声明中删除final,则不会出现编译器错误。如果r的意图是测试SO people,你肯定会得到非常好的答案。@Nimbari,不,我的意图不是测试SO people,但我真的很困惑,我知道解决方案,但不知道最终变量是在我们定义它们时初始化的,还是在该类的每个构造函数中初始化的。@Ali:没问题,希望你是现在清楚了。顺便说一句,谢谢你接受我的回答。