2014-09-26 93 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

一个类被定义为某个特定的工作,这样它可以使用一些变量,它不希望别人访问它(“其他”意味着局外人类),有些你希望其他类访问它。全部取决于您的要求。

“专用实例变量被定义为仅用于类”。因为在您的代码中您试图访问类本身内部的私有实例变量,所以它是完全合法的。

注意:如果你想指定实例,静态方法不能访问实例变量,我的意思是在静态方法内部创建实例(对象)并通过创建的引用访问它。