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

时间:2015-09-25 23:25:51

标签: java variables variable-assignment

我正在完成一项任务,并且我遇到了这个错误:无法为最终变量计数分配值

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

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

5 个答案:

答案 0 :(得分:10)

Property 'result' does not exist on type 'EventTarget' 会抛出错误。每个Oracle,

  

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

您可以按照该文章here进行操作。看看你的代码,似乎你真的不希望count++;成为最终的。您希望能够在整个程序中更改其值。修复方法是删除count修饰符。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

'final'关键字用作常量。您可以在声明中然后在那儿分配一个值,也可以在构造函数中分配一个值,但只能分配一次。您无法在代码下方进一步增加其值。因此count ++将产生错误。

还知道,“最终”与类或函数一起使用时,会阻止它们被继承到子类中。

答案 4 :(得分:0)

有一种方法,您可以使用数组而不是变量,并使用其第一个元素。

final int[] a = new int[0];