2016-10-16 139 views
0

在我的Java類中,我們剛剛瞭解了範圍。據我所知,我的意思是曾經簡要提及過一次,從此再也沒有提過。發佈了一些問題,並且我無法理解兩段代碼之間的區別。第一招:Java中的私有,靜態和變量範圍

public class Shadow3 { 
    private static int i = 99; 
    public static void main(String[] args) { 
     for (int i = 0; i < 10; i++) { 
      System.out.println(i); 
     } 
     System.out.println(i); 
    } 
} 

,第二個:

public class Shadow4 { 
    private int i; 
    public void doSomething(int n) { 
     for (int i = 0; i < n; i++) { 
      System.out.println(i); 
     } 
    } 
    public static void main(String[] args) { 
     new Shadow4().doSomething(9); 
    } 
} 

據我所知,與第一個錯誤是不是該變量聲明兩次,但我不明白爲什麼範圍在Shadow類中聲明的變量沒有達到導致重複錯誤的主要方法。我也明白爲什麼在第一段代碼中,變量i在for循環中被使用時不能被聲明爲私有靜態變量,因爲for循環中的i值是臨時的,但我不明白如何第二段代碼中的變量i是有效的,因爲它仍然是私有的。

+5

我不認爲無論是塊的代碼有錯誤。你爲什麼認爲他們這樣做? For循環確實有臨時變量,僅限於它們。你有跑這些代碼嗎?你注意到了什麼? –

+0

嗯,你完全正確。我刪除並重新編寫了我的課程,然後再次嘗試,並且工作正常!我一定錯過了我的代碼中的其他錯誤。謝謝:) –

+0

這是相同的問題http://stackoverflow.com/questions/10459487/difference-between-public-static-and-private-static-variables – Neeraj

回答

0

我不明白爲什麼在Shadow類中聲明的變量範圍沒有達到導致重複錯誤的主要方法。

類變量的範圍確實達到了主要方法。但是這個教訓是關於陰影的。不應該有任何錯誤。

變量i不能被聲明爲private靜態時,然後在for循環使用的,因爲我在for循環的值是暫時的,

對於循環變量是暫時的,局部範圍,是的,但你的推理是不正確的。您不能將局部變量聲明爲privatestatic。就是這樣。

我不明白如何在第二段代碼變量我是有效的,因爲它仍然是私人的。

private不是問題所在。該變量可以是默認的,受保護的或公共的。該代碼仍然有效。事實上,這兩個代碼示例看起來都是有效的。

在第一個,你可以參考一個靜態變量與Shadow3.i,其他的,你有一個實例變量,所以doSomething方法中,你會使用this.iShadow4.this.i

+0

非常感謝你花時間回答。我只是意識到,我的代碼有一個單獨的錯誤,導致它看起來好像私有/靜態是不存在時的問題。 –

+0

歡迎。如果這解決了您的問題,請隨時使用帖子旁邊的複選標記接受答案 –