簡體   English   中英

錯誤:無法為最終變量賦值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM