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

问题描述 投票:8回答:4

我正在进行一项任务,我遇到了这个错误:无法为最终变量计数赋值

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

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很新,显然不是计算机专家,所以请用最简单的术语解释问题/解决方案。非常感谢。

java variables variable-assignment
4个回答
10
投票

count++;会抛出错误。每个Oracle,

最终变量只能分配一次。声明变量final可以作为有用的文档,它的值不会改变,可以帮助避免编程错误。

你可以跟随那篇文章here。看看你的代码,似乎你真的不希望count成为最终的。您希望能够在整个程序中更改其值。解决方法是删除final修饰符。


4
投票

当你声明一个变量final时,你基本上告诉编译器这个变量是常量并且不会改变。你宣布count final,但你还没有初始化(设置一个值)。这就是为什么你被允许在构造函数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
    }
}

1
投票

抛出错误是因为您已将count声明为最终变量。最终变量只不过是常量。初始化后,我们无法更改最终变量的值。


0
投票

'final'关键字作为常量。您可以在声明中指定一个值,也可以在构造函数中指定一个值,但也只能指定一次。你无法在代码中进一步降低其价值。因此count ++将生成错误。

还知道,当与类或函数一起使用时,'final'会阻止它们被继承到子类中。

© www.soinside.com 2019 - 2024. All rights reserved.