我正確的說main()裏面的塊沒有單獨的作用域嗎?Java中主要變量的範圍?
例如,如果我這樣做,我會得到編譯錯誤:
static int i = 1;
public static void main(String[] args) {
int i = 2;
{
int i = 3;
}
}
這是爲什麼?
我正確的說main()裏面的塊沒有單獨的作用域嗎?Java中主要變量的範圍?
例如,如果我這樣做,我會得到編譯錯誤:
static int i = 1;
public static void main(String[] args) {
int i = 2;
{
int i = 3;
}
}
這是爲什麼?
當我嘗試編譯此,我得到這個消息:
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
(推薦在靜態變量的訪問)
好的,所以Java確實具有塊級別範圍,但是當它與外部類級別的名稱衝突時,它不會有效嗎?據說爲了避免編程錯誤。謝謝! – user3188617
它與類無關。 java具有塊級別範圍提供了堆棧上的另一個塊(即方法局部變量)不具有相同名稱的變量。 – Matt
Java不允許堆棧的模糊處理(即局部變量):
的static int
可以通過以下兩種方式之一進行訪問。您可以混淆實例或類變量,因爲還有其他方式可以訪問它們(例如,this.i,或者靜態的MainClass.i)。
你爲什麼不嘗試一下? – Justin
無關,爲什麼不能編輯此問題? – Secko
@Secko因爲我已經提出編輯 – Justin