评估静态私有变量(Java),不应';这不违法吗?

评估静态私有变量(Java),不应';这不违法吗?,java,oop,access-modifiers,static-variables,private-members,Java,Oop,Access Modifiers,Static Variables,Private Members,在您将此问题标记为重复问题之前,请确保您提供了自己的解释。非常感谢。请注意私有静态变量,它们不是实例变量 我有以下情况: public class Statics { private static class Counter { private int data = 5; //Declared as private. // public Counter() throws IllegalAccessException { // throw

在您将此问题标记为重复问题之前,请确保您提供了自己的解释。非常感谢。请注意私有静态变量,它们不是实例变量

我有以下情况:

public class Statics {
   private static class Counter {
        private int data = 5; //Declared as private.

//        public Counter() throws IllegalAccessException {
//            throw new IllegalAccessException();
//        }

        public void bump(int inc) {
            inc++;
            data = data + inc;
        }
    }

    public static void main(String[] args) throws IllegalAccessException {
        Counter c = new Counter();
        int rnd = 2;
        c.bump(rnd);

        c.data = 0; //How this possible? It is declared as private.

        System.out.println(c.data + " & "+ rnd);
    }
}
产出:0和2

我的问题是,我怎么可能从类外访问数据(私有静态)变量

在Java中,我们知道私有访问修饰符的成员不能从类外部访问


我们总是使用setter和getter来修改私有变量的值,不是吗?我遗漏了什么吗?

因为类
计数器
是类
静态的私有成员,所以可以从类内访问类的私有成员

我的问题是,我怎么可能从类外访问数据(私有静态)变量。

关于你的问题:


您已经能够从类本身内部访问数据(私有静态)变量”(而不是在“Statics”类外部)

您可以检查这一点,因为
计数器
是在
静态
中定义的。如果您在
静态
之外定义了
计数器
,它将抛出您期望的错误。我们处理的是静态变量,而不是实例变量。那些将问题标记为重复的人提供了不正确/不相关的链接/引用。好吧,静态“变量”也是类的成员,因此至少第二个链接是有效的重复链接(没有检查第一个,但可能是相同的推理)