评估一个静态私有变量(Java),不应该是非法的吗? [复制]
Posted
技术标签:
【中文标题】评估一个静态私有变量(Java),不应该是非法的吗? [复制]【英文标题】:Assessing a static private variable (Java), Shouldn't it be illegal? [duplicate] 【发布时间】:2019-05-06 22:39:45 【问题描述】:在将此问题标记为重复之前,请确保提供您自己的解释。谢谢你。请注意私有 STATIC 变量,它们不是实例变量。
我有以下场景:
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 中,我们知道 private 访问修饰符的成员不能从类外部访问。
我们总是使用 setter 和 Getter 来修改私有变量的值,不是吗?我错过了什么吗?
【问题讨论】:
您可以查看why-can-outer-java-classes-access-inner-class-private-members 因为Counter
是在Statics
内部定义的。如果你在Statics
之外定义了Counter
,它会抛出你所期望的错误。
我们处理的是静态变量而不是实例变量。那些将问题标记为重复的人提供了不正确/不相关的链接/参考。
好吧,静态“变量”也是该类的成员,因此至少第二个链接作为重复链接是有效的(没有检查第一个,但可能是相同的推理)
【参考方案1】:
因为类Counter
是类Statics
的私有成员,所以类的私有成员可以从其类中访问。
【讨论】:
【参考方案2】:My question is, how is it even possible that I am able to access the data (private static) variable from outside the class.
你的问题:
“您已经能够从类本身内部访问数据(私有静态)变量”(不在“静态”类之外)“
【讨论】:
以上是关于评估一个静态私有变量(Java),不应该是非法的吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章