我正在进行一项任务,我遇到了这个错误:无法为最终变量计数赋值
这是我到目前为止的代码......
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很新,显然不是计算机专家,所以请用最简单的术语解释问题/解决方案。非常感谢。
count++;
会抛出错误。每个Oracle,
最终变量只能分配一次。声明变量final可以作为有用的文档,它的值不会改变,可以帮助避免编程错误。
你可以跟随那篇文章here。看看你的代码,似乎你真的不希望count
成为最终的。您希望能够在整个程序中更改其值。解决方法是删除final
修饰符。
当你声明一个变量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
}
}
抛出错误是因为您已将count声明为最终变量。最终变量只不过是常量。初始化后,我们无法更改最终变量的值。
'final'关键字作为常量。您可以在声明中指定一个值,也可以在构造函数中指定一个值,但也只能指定一次。你无法在代码中进一步降低其价值。因此count ++将生成错误。
还知道,当与类或函数一起使用时,'final'会阻止它们被继承到子类中。