当前位置: 首页 > 知识库问答 >
问题:

错误:无法为最终变量赋值

耿弘阔
2023-03-14

我正在做一个赋值,我被这个错误困住了:无法为最终变量计数赋值

到目前为止,这是我的代码...

public class List
{
    private final int Max = 25;
    private final int count; 
    private Person list[];

    public List()
    {
        count = 0; 
        list = new Person[Max];
    }

    public void addSomeone(Person p)
    {
        if (count < Max){
            count++; // THIS IS WHERE THE ERROR OCCURS 
            list[count-1] = p;
        }
    }

    public String toString()
    {
        String report = "";

        for (int x=0; x < count; x++)
            report += list[x].toString() + "\n"; 

        return report;
    }
}  

我对java非常陌生,显然不是电脑高手,所以请尽可能用最简单的术语解释问题/解决方案。非常感谢。

共有3个答案

谷奕
2023-03-14

这是抛出错误,因为你已经声明了计数作为最终变量。最终变量只不过是常量。一旦最终变量初始化,我们就不能更改它的值。

太叔鹏云
2023-03-14

当你声明一个变量final时,你基本上告诉编译器这个变量是常量,不会改变。您声明了countfinal,但尚未初始化(设置值)。这就是为什么您可以在构造函数中设置它的值。public List(){}:最终变量可以初始化一次,之后就不能修改了。

但也有例外,例如,如果您创建了一个int值为count的对象,并添加了一个setter,那么您仍然可以修改最终的对象。

这方面的例子:

public class ExampleObject {
    private int count;

    public ExampleObject(int count) {
        this.count = count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCount() {
        return count;
    }
}

public class ExampleDemo {

    private static final ExampleObject obj = new ExampleObject(25);

    public static void main(String[] args) {
        obj = new ExampleObject(100); //not allowed: cannot assign a value to final variable
        obj.setCount(100); //allowed
    }
}
归浩博
2023-03-14

计数 将抛出一个错误。根据神谕,

最终变量只能被分配一次。声明变量最终可以作为有用的留档,其值不会改变,并有助于避免编程错误。

你可以在这里看那篇文章。看看你的代码,似乎你真的不想把count作为最终结果。您希望能够在整个程序中更改其值。修复方法是删除final修饰符。

 类似资料:
  • 问题内容: 我正在使用netbeans 7.1.1。这是我的代码,在这里我已将“ c”声​​明为“ final int”,但行“ c = Integer.parseInt(f.getText());” 我收到一个错误“无法为最终变量赋值”。如果我从声明中删除final一词,并使之与“ int c”相同,则在同一行中会出现错误“无法从类内访问局部变量c;需要声明为final”。谁能告诉我为什么会这样

  • 因为我相信这是一个很好的编程实践,所以如果我的所有(局部或实例)变量只需要编写一次,我就将它们设为< code>final。 但是,我注意到当变量赋值可以抛出异常时,您不能将所述变量设为最终变量: 有没有办法在不诉诸临时变量的情况下做到这一点?(或者这不是最终修饰符的正确位置?)

  • Java规范说:变量可以声明为final。最后一个变量只能分配一次。声明变量>final可以作为有用的文档,说明其值不会改变,并有助于避免编程>错误。 如果最后一个变量被赋值,除非它在赋值之前明确地没有赋值(§16)>,否则这是一个编译时错误。 空白final是其声明缺少初始值设定项的final变量。 null 如果你觉得这是一个愚蠢的问题,我很抱歉,但我要求你指出一个来源,我可以得到答案。 谢谢

  • 问题内容: 我有一个座位数组,该数组有两个字符串(已选择和为空)。单击鼠标后,我想遍历数组并找到选定的座位。当我按下按钮时,它说: 无法分配最终的局部变量seatno,因为它是用封闭类型定义的。 问题答案: 关键是封闭类型中的方法局部变量实际上已 复制 到匿名类的实例中(这是由于激活框架的问题,但我将不做进一步的详细介绍,因为这与问题无关)。这就是为什么它们需要是final的原因,因为嵌套类型实例

  • 我正在将一个变量赋给一个数组,它是我在刀片文件中声明的。它返回一个错误 下面是我的代码: 我无法理解这个错误。谢谢!