2012-11-24 43 views
1

像其他變量一樣,我想將最終字段類型變量賦值爲空,但初始化被Java阻止。它的邏輯是什麼?也許我想使用我的變量的默認值?對於int = 0,字符串=空布爾=假等等爲什麼最終字段變量不能在Java中分配爲空白?

public class Hello { 

static final int myNumber; /* it is giving "The blank final field myNumber 
           may not have been initialized" error in Eclipse */ 
} 
+0

因爲它是'最後'。只對那些你想要初始化一次的字段使用final,從而始終保持一個常量值。 :) –

回答

3

最終變量只能通過初始化程序或賦值語句初始化一次。它不需要在聲明點初始化:這被稱爲「空白最終」變量。

更改代碼

public class Hello { 

final int myNumber; 
public Hello(int num){ 
this.myNumber = num; 
} 

} 

靜態最終變量使用靜態塊初始化

static{ 
     myNumber = 0; 
    } 
+0

但是如果在聲明它給出錯誤時將變量的值留空,我不能在以後聲明它。也許我的Eclipse困惑:) – hakiko

+0

你可以稍後用構造函數初始化; –

+0

還有一個問題@Mohammod Hossain。如果構造函數可以在每次對象調用或創建時更改final值,則最終(常量)變量可以更改。它非常危險嗎? – hakiko

4

在Java中,您使用final關鍵字與static變量之後,你必須定義聲明的點值。你必須給它一些價值並堅持下去。

+0

不好意思?如果我不使用'='我錯誤,如果我使用'='沒有問題? – hakiko

+0

如果它是靜態的並且是最終的,則必須在聲明時使用=。 –

+0

或者使用[static initializer](http://stackoverflow.com/questions/335311/static-initializer-in-java),但這只是語法糖。 – tjameson

0

當您使用「最後」修飾符的變量,你必須對其進行初始化,因爲它是隻有當你允許使用賦值操作符(你可以初始化一次,如果你把它留空)就可以了(「=」)。像parker.sikand說的那樣,如果你之後嘗試爲它賦值,你會得到一個錯誤。

此外,最後一個重要提示STRICTLY意味着您不能使用賦值運算符。如果「final」的對象是一個可變對象,那麼該對象的內容當然可以在不使用賦值操作符的情況下更改。

編輯:我相信最終的變數,必須保證在計劃這就是爲什麼你通常初始化它聲明某個時間點進行初始化

1

Java specs:「這是一個編譯時錯誤,如果一個空白的final(§4.12.4)類變量並沒有被聲明的類的靜態初始化方法(§8.7)明確賦值(§16.8)。「

+0

+1。 – Pacerier

相關問題