考虑这个简单的类:
public class MyClass3
{
private int a;
public MyClass3(int first)
{
this.a = first;
}
}
public class MyClassTester
{
public static void main(String[] args)
{
MyClass3 c1 = new MyClass3(30);
System.out.println(c1.a);
}
}
答案 0 :(得分:5)
编译器能够告诉您在声明类之外访问私有变量的尝试无效。您不必通过运行时来获得它。
作为附录:代码在语义上无效,per the JLS:
- 只有在类型可访问且声明成员或构造函数允许访问时,才能访问引用类型的成员(类,接口,字段或方法)或类类型的构造函数:
- [...]否则,成员或构造函数被声明为私有,并且允许访问当且仅当它出现在顶级类的主体中(第7.6节)时才包含成员或构造函数的声明。
如果你想要访问它,传统上你会使用getter ...
public int getA() {
return a;
}
...但如果您不想制作其他方法(无论出于何种原因),请将其可见性更改为public
。
答案 1 :(得分:0)
因为考虑到问题的本质,编译器甚至无法生成运行程序的代码