对为什么可以访问私有变量感到困惑?

时间:2014-09-26 08:16:18

标签: java

我最近看到一个问题,即下面这段代码的执行结果是什么。

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。所以我很困惑,为什么可以在这段代码中访问私有变量?虽然main位于Sandys级,但我创建了一个新的Sandys。我还可以访问Sandys中新main对象的私有变量吗?

4 个答案:

答案 0 :(得分:4)

您可以从同一个类中访问私有成员,即使是在静态方法中也是如此。

答案 1 :(得分: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;
  }

它确实有意义,不是吗?

答案 2 :(得分:1)

您可以在类中访问所有私有,protected,public和not modifier变量,但无法从另一个类访问私有变量。

P.S。对C#,C ++和许多其他编程语言来说也是如此。

答案 3 :(得分:0)

一个类被定义为某个特定的工作,并且以这种方式它可能使用一些它不希望其他人访问它的变量(“其他”意味着外部类)以及一些你希望其他类访问它。所有这些取决于你的要求。

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

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