我有一個變量聲明爲在Java中最後關於在Java中聲明爲final的變量的一些說明?
如果我在我的代碼聲明以下變量以下疑問:
private final String CURRENT_USER;
的Eclipse告訴我下面的錯誤信息:的空白最終字段CURRENT_USER可能尚未初始化
爲什麼?從我目前瞭解,如果我一個變量聲明爲最終我可以初始化只有一次,但在我看來,我可以初始化它,只有當我在代碼中聲明它,而不是某個地方後...
爲什麼?
TNX
安德烈
我有一個變量聲明爲在Java中最後關於在Java中聲明爲final的變量的一些說明?
如果我在我的代碼聲明以下變量以下疑問:
private final String CURRENT_USER;
的Eclipse告訴我下面的錯誤信息:的空白最終字段CURRENT_USER可能尚未初始化
爲什麼?從我目前瞭解,如果我一個變量聲明爲最終我可以初始化只有一次,但在我看來,我可以初始化它,只有當我在代碼中聲明它,而不是某個地方後...
爲什麼?
TNX
安德烈
你必須在聲明或在構造函數中進行初始化。
要麼
private final String CURRENT_USER = "SomeUser";
或在構造
private final String CURRENT_USER;
public YourClassName(){
CURRENT_USER = "test";
}
但是,你應該在駝峯命名實例變量方式
private final String currentUser;
否則有人(包括我)認爲這是一見鍾情。
@OliCharlesworth謝謝我對命名感到困惑。 –
空白最終實例變量必須在 被明確賦值(§16.9)每一個構造的端部(§8.8),其中它是 聲明的類的;否則會發生編譯時錯誤。
這是有道理的,類似的理由如下
public void someMethod() {
String s;
System.out.println(s);
}
你不應該能夠使用未初始化的變量。由於它是final
,你只能初始化一次,你必須等到初始化發生。
你沒有那麼多的選擇。在使用它之前,在實例初始化塊或構造函數中初始化它。
Java正在警告您,因爲您創建了一個字段;但沒有初始化值 - 因此,它隱含地爲空。
private final String CURRENT_USER; // <-- CURRENT_USER = null;
您可以設置此常數每構造函數,或者你可以使用一個初始化塊;例如,
private final String CURRENT_USER;
{
CURRENT_USER = UserLoader.getCurrentUser(); // <--- load the user.
}
或使用的構造方法(再次,作爲一個例子),
public MyConstructor(String user) {
CURRENT_USER = user;
}
被聲明最終變量必須在聲明(即),靜態塊或構造進行初始化的對象。聲明最後事情的
private final String CURRENT_USER = "SOMETHING";
部分是保證該值將提供給該對象一旦完全初始化 - 否則,你就會有一個最終的,空的對象。
因爲你不應該能夠使用未初始化的變量。 –
確實 - WHEN會被初始化嗎?這是不確定的。而不確定因素在爪哇地區是一個不容否認的問題。 – Gimby