访问私有变量的Java静态方法

T.K*_*.K. 17 java variables static scope private

我的印象是私有非静态变量只能通过调用变量所在对象的方法来访问,但事实并非如此.有人可以解释为什么以下编译和运行的原因?

public class Sandbox {
    private String _privateString = "unmodified";
    public static void setPrivateString(String str, Sandbox s) {
        s._privateString = str;
    }
    public String toString()
    {
        return _privateString;
    }

    public static void main(String[] args) {
        Sandbox s = new Sandbox();
        setPrivateString("modified", s);
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

modified
Run Code Online (Sandbox Code Playgroud)

编辑:在C#中也是如此.

dav*_*vin 22

A类的私有成员变量可以通过任何 A类方法(静态或非静态)访问(即读/写),因此在您的示例中,因为更改字符串的方法是同一类的方法成员属于,它被授予对变量的访问权限.

原因是因为一个类被认为是一个独立的逻辑体(即一个特定的实现),所以有意义的是隐私包含在一个类中; 没有理由从该访问权限中排除静态方法,因为它们也是该类提供的特定实现的一部分.

  • 那么类的任何实例都可以访问该类的所有其他实例的所有私有变量吗? (2认同)
  • 确切地!乍一看这可能看起来很奇怪,但当您从类作为单个实现的角度考虑它时,这是有道理的。 (2认同)