2014-09-26 99 views
0

我最近看到一個問題,下面這段代碼的執行結果是什麼。混淆爲什麼可以訪問私有變量?

public class Sandys { 
    private int court; 
    public static void main(String argv[]){ 
     Sandys s = new Sandys(99); 
     System.out.println(s.court); 
    } 
    Sandys(int ballcount){ 
     court = ballcount; 
    } 
} 

我認爲它不能執行,因爲在main我試圖訪問一個私有變量。

但是,此代碼可以完美執行,結果爲99。所以我很困惑,爲什麼在這個代碼中可以訪問私有變量?雖然mainSandys類,但是我創建一個新的Sandys。我仍然可以訪問main中新的Sandys對象的私有變量嗎?

+3

答案就在這裏。 http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html – 2014-09-26 08:18:14

+0

http://stackoverflow.com/questions/4707504/why-can-i-access-a-private-variable-from-主方法 – Jayan 2014-09-26 08:20:44

回答

4

即使使用靜態方法,也可以從同一個類中訪問私有成員。

1

main()是一種特殊的方法,因爲它被用作Java應用程序的起點。 但是,它仍然是一種正常的靜態方法,它遵循靜態方法的所有訪問限制。這是main()類方法嗎?是的。因此,它可以訪問同一班級的私人成員。

考慮一下:如果沒有訪問私有字段的工廠方法將不得不寫入不同的方法。

class A { 
    private int a=0; 
    private int b=0; 

    private A() {} 

    //getters 

    public static A getNewInstance(int a, int b) { 
    A a = new A(); 
    a.a = a; 
    a.b = b; 
    return A; 
    } 

它確實有道理,不是嗎?

1

您可以訪問所有私人,保護公共和修飾的變量內線等級,但你不能從另一個類訪問私有變量。

P.S.對於C#,C++和許多其他編程語言也是如此。

1

一個類被定義爲某個特定的工作,這樣它可以使用一些變量,它不希望別人訪問它(「其他」意味着局外人類),有些你希望其他類訪問它。全部取決於您的要求。

「專用實例變量被定義爲僅用於類」。因爲在您的代碼中您試圖訪問類本身內部的私有實例變量,所以它是完全合法的。

注意:如果你想指定實例,靜態方法不能訪問實例變量,我的意思是在靜態方法內部創建實例(對象)並通過創建的引用訪問它。