评估一个静态私有变量(Java),不应该是非法的吗?
Assessing a static private variable (Java), Shouldn't it be illegal?
在将此问题标记为重复之前,请确保提供您自己的解释。谢谢你。请注意私有静态变量,它们不是实例变量。
我有以下场景:
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
我的问题是,我怎么可能从 class 外部访问数据(私有静态)变量。
在Java中,我们知道private访问修饰符的成员不能从class外部访问。
我们总是使用 setters & Getters 来修改私有变量的值,不是吗?我错过了什么吗?
因为 class Counter
是 class Statics
的私有成员,class 的私有成员可以从其 class 中访问.
My question is, how is it even possible that I am able to access the data (private static) variable from outside the class.
针对您的问题:
"您已经能够从 class 本身内部访问数据(私有静态)变量"(不在 'Statics' class 之外)"
在将此问题标记为重复之前,请确保提供您自己的解释。谢谢你。请注意私有静态变量,它们不是实例变量。
我有以下场景:
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
我的问题是,我怎么可能从 class 外部访问数据(私有静态)变量。
在Java中,我们知道private访问修饰符的成员不能从class外部访问。
我们总是使用 setters & Getters 来修改私有变量的值,不是吗?我错过了什么吗?
因为 class Counter
是 class Statics
的私有成员,class 的私有成员可以从其 class 中访问.
My question is, how is it even possible that I am able to access the data (private static) variable from outside the class.
针对您的问题:
"您已经能够从 class 本身内部访问数据(私有静态)变量"(不在 'Statics' class 之外)"