0

我有一个问题,在尝试几个代码片段时我遇到了一个代码

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();

    }
}

一切正常,代码正在编译。

我的问题是如果我引入另一个构造函数有什么问题。甚至错误也出现在我编写参数化缺点的那一行。

我对 JAVA 有所了解,但我对这段代码感到困惑。

4

4 回答 4

7
final int i;

您已定义ifinal。您只能在构造函数中为最终变量赋值。

 O(int j)// error here as THE BLANK FINAL FIELD i IS NOT INITIALIZED
    {
        j=20;
        System.out.println(j);
    }

在这里,您没有为i. 如果有人使用此构造函数(带参数的构造函数)创建对象,i则不会分配值。

如何解决这个问题?

正如你所说,要么你必须评论这个构造函数(或)i在这个构造函数中赋值,就像你在其他构造函数中所做的那样。

于 2012-10-24T15:36:56.967 回答
3
   O(int j){
        this(); // <----- you can add this line. 
        j=20;
        System.out.println(j);
    }
于 2012-10-24T15:40:53.843 回答
0

“i”是一个实例最终变量,因此我们需要在我定义的每个构造函数中初始化它。

于 2012-10-24T15:58:45.030 回答
0

变量必须final在声明时初始化或分配给构造函数主体中的值。如果您不初始化final变量,则会出现编译器错误。

如果您调用第二个构造函数,则该变量永远不会被分配给一个值。

于 2012-10-24T15:39:30.613 回答