[英]error: cannot assign a value to final variable
我正在處理一項任務,但遇到了這個錯誤:無法為最終變量計數賦值
到目前為止,這是我的代碼...
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++;
會拋出錯誤。 根據甲骨文,
一個 final 變量只能賦值一次。 聲明一個變量 final 可以作為有用的文檔,它的值不會改變,並且可以幫助避免編程錯誤。
您可以在此處閱讀該文章。 看看你的代碼,你似乎真的不希望count
成為最終的。 您希望能夠在整個程序中更改其值。 解決方法是刪除final
修飾符。
當你聲明一個變量final
你基本上是告訴編譯器這個變量是常量並且不會改變。 您已將count
聲明為 final,但尚未對其進行初始化(設置值)。 這就是為什么允許您在構造函數public List() {}
設置它的值的原因:final 變量可以初始化一次,之后就不能修改了。
不過也有例外,例如,如果您創建了一個 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 int[] a = new int[0];
'final' 關鍵字用作常量。 您可以在聲明中分配一個值,或者您可以在構造函數中分配一個值,但也只能分配一次。 您不能在代碼中進一步降低其值。 因此 count++ 會產生錯誤。
還要知道“final”與類或函數一起使用時,會阻止它們被繼承到子類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.