2012-06-26 77 views
2

聲明的變量是主要的,一個公共變量中的變量?範圍的方法

public static void main(String[] args) { 
    ......... 

    for(int i=0;i<threads.length;i++) 
     try { 
      threads[i].join(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

    long time=0; 
    .... 
    } 

itime是他們公共的變量?

當然,如果我的推論是正確的,也屬於公共方法的任何變量,應考慮公衆。我對嗎?

+0

只有約'其他靜態方法main'不同的是,在運行應用程序時,Java運行時會自動調用這個特定的方法。 'main'與其他公有,靜態,方法(包括名稱範圍的規則)不同。 –

回答

3

否。變量'i'和'time'是在main方法內部聲明的,所以它們的作用域是局部的,僅限於主方法。你不能在方法外使用它們。

8

變量itime僅限於本地功能。他們在外面看不見。只有類成員變量可以在外部訪問(取決於其訪問修飾符)。

已經在SO here中詳細說明了區別。

+0

所以他們是私人的......不是嗎? – qxc

+1

他們在,你不能訪問它們使用它們的方法之外的意義*私人*。但是他們在階級意義上不是*私人*。 –

+0

非私人或公共或受保護。訪問修飾符只與類成員相關。局部變量只在本地範圍內可見。一些更多的解釋[這裏](http://stackoverflow.com/questions/1177723/what-is-the-difference-between-a-member-variable-and-a-local-variable) –

2

他們不被視爲公衆。它們是局部變量。他們在該方法之外沒有任何可見性(更不用說該類)。

1

否。如果變量在方法內部 - 即使是主方法 - 它也是局部變量,其範圍僅在該方法內。

public class MyClass { 
    public int x; // this is a public variable 

    public void doSomething() { // this is a public method 
     int y = 9; // this is a local variable 
    } 

    public int getX() { 
     return x; // we can do this 
    } 

    public int getY() { 
     return y; // we CANNOT do this because y is not public and is only 
        // defined within the doSomething() method 
    } 
} 
1

正如其他人所說,這兩個變量只能用於main。但是我的範圍更加有限 - 因爲它是在for循環中聲明的,所以它只能在for循環中使用。

1

局部變量永遠不會公開,不管它們可能駐留的是什麼方法(或構造函數)。局部變量的範圍至多是整個方法體。

「public」,「private」和類似的概念不適用於局部變量,而是適用於實例或類變量。關鍵的區別在於局部變量駐留在堆棧上,因此它們的作用域被自動限制爲堆棧幀的生存期。他們不需要任何訪問規則。訪問類型「私有」,「默認」等表示需要特別強加的限制,因爲它們不是「自然」的。它們也可以被反射破壞,不像局部變量的範圍。