我有兩個final
在類級別聲明的變量,但它們沒有被初始化。
因此,現在當我嘗試爲該類創建默認構造函數時,它給出了一個錯誤,說
The blank final field may not have been initialized
。最終變量初始化
爲什麼會發生此錯誤?爲什麼需要在構造函數中初始化最終變量?
我還有另一個查詢,也就是說,不可能創建一個沒有默認構造函數的實例嗎?即使我們有參數化的構造函數?
我有兩個final
在類級別聲明的變量,但它們沒有被初始化。
因此,現在當我嘗試爲該類創建默認構造函數時,它給出了一個錯誤,說
The blank final field may not have been initialized
。最終變量初始化
爲什麼會發生此錯誤?爲什麼需要在構造函數中初始化最終變量?
我還有另一個查詢,也就是說,不可能創建一個沒有默認構造函數的實例嗎?即使我們有參數化的構造函數?
Final variable
是那些變量which can not be changed once object is initialized.
所以任何你將不得不初始化最終變量。如果您提供默認構造函數以及參數化consructor,則必須初始化這些變量,因爲您以後不能更改該值。
爲什麼需要在構造函數中初始化最終變量?
A final
字段必須在構造函數中初始化,因爲這是final
已定義的意思。
如果你調用一個構造函數,你不必在默認的構造函數中設置final
域。
class A {
final int a;
public A() {
this(0);
}
public A(int a) {
this.a = a;
}
}
是不可能沒有默認構造函數創建一個實例?
是的。有很多方法可以做到這一點,通常是通過調用一個帶參數的構造函數。
即使我們有參數化構造函數?
在這種情況下,您將只有一個構造函數,如果您定義一個構造函數,它將不帶任何參數。
參考http://stackoverflow.com/questions/26935453/the-blank-final-field-initial-may-not-have-been-initialized – sasikumar
您必須始終用構造函數初始化最終字段。最終字段必須在對象實時期間分配。無論構造函數 - 每個最終字段都必須賦值。 – mlewandowski
@mlewandowski你不必使用構造函數來完成它 - 你可以直接爲字段賦值或使用初始化塊(基本上是相同的)。 –