2013-08-31 23 views
4
class returntest 
{ 
    public static void main(String...args) 
    { 
     int a; 
     System.out.println(a); //Line 1 

     int b[] = new int[10]; 
     System.out.println(b[1]); //Line 2 
    } 
} 

第1行出現編譯器錯誤(顯然),說明該變量可能未被初始化。我知道所有int數組元素默認初始化爲0(所以第2行編譯成功),但我的問題是爲什麼編譯器應用相同的邏輯(設置爲0爲所有整數)爲常規(非數組) int變量。int數據類型初始化:Array vs Regular

是否有任何限制,禁止編譯器這樣做?

+0

請查看http://stackoverflow.com/questions/13511702/int-array-initialization – Prabhaker

+2

將來,請在您提出問題時適當地設置您的代碼的格式 - 請參閱http://tinyurl.com/so -list。如果您使用傳統名稱(不像'returntest'),即使對於虛擬代碼也是如此 - 它只是減少了分散注意力的方式。 –

回答

0

當變量作用域是局部變量時,你必須初始化局部變量。

當你聲明任何本地/塊變量,他們沒有得到默認值。他們必須在訪問它之前分配一些值,否則明智的編譯器會拋出一個錯誤。

,正如你在代碼

int a; //Gives error because not assigned any value 

看到當你爲一個局部變量分配資源,Java沒有一個值寫入內存。你得到錯誤的原因是因爲Java在你使用它之前確保你給它一個值。 Sun意識到這可能是C代碼中難以診斷的問題,因爲您沒有從編譯器獲得幫助,所以他們決定在編譯時檢查它。

請參閱本link

2

here:-

局部變量是略有不同;編譯器從不將默認值分配給未初始化的局部變量。如果您不能 初始化聲明它的本地變量,請確保 在嘗試使用它之前爲其分配一個值。訪問未初始化的局部變量 將導致編譯時錯誤。

4

在語句塊中定義的局部變量總是必須在使用前初始化。

但是,直接在類的主體中定義的成員變量會在創建對象時自動初始化爲0。

有用的線程here

0

這是一個語言設計決定。

對本地變量進行默認初始化可能會隱藏錯誤。局部變量的用法意味着你想先設置它。忘記設置它的簡單情況,或僅在if中設置它纔會被捕獲。