2014-01-13 89 views
0

我正確的說main()裏面的塊沒有單獨的作用域嗎?Java中主要變量的範圍?

例如,如果我這樣做,我會得到編譯錯誤:

static int i = 1; 

public static void main(String[] args) { 
    int i = 2; 

    { 
     int i = 3; 
    } 
} 

這是爲什麼?

+2

你爲什麼不嘗試一下? – Justin

+0

無關,爲什麼不能編輯此問題? – Secko

+0

@Secko因爲我已經提出編輯 – Justin

回答

1

當我嘗試編譯此,我得到這個消息:

error: variable i is already defined in method main(String[]) 

這意味着不會導致錯誤。 main中的第一個i的範圍適用於整個主體,因此當您嘗試製作另一個主體時,在代碼塊中會出現錯誤。

請注意,如果你宣佈一個塊中的i

public static void main(String[] args){ 
    { 
     int i = 2; 
    } 
    { 
     int i = 3; 
    } 
} 

你沒有得到一個編譯錯誤(見here)。 this.i(不推薦)或ClassName.i(推薦在靜態變量的訪問)

+0

好的,所以Java確實具有塊級別範圍,但是當它與外部類級別的名稱衝突時,它不會有效嗎?據說爲了避免編程錯誤。謝謝! – user3188617

+0

它與類無關。 java具有塊級別範圍提供了堆棧上的另一個塊(即方法局部變量)不具有相同名稱的變量。 – Matt

0

Java不允許堆棧的模糊處理(即局部變量):

static int可以通過以下兩種方式之一進行訪問。您可以混淆實例或類變量,因爲還有其他方式可以訪問它們(例如,this.i,或者靜態的MainClass.i)。