我正在尝试理解受保护和封装acesses的想法,我已经在编译器上尝试了它们但它一直告诉我存在问题
public class example{
int s = example2.v;
public static void main(String args[]){
}
}
public class example2 {
int v = 0 ;
}
任何人都可以帮我吗?为什么会说:
非静态变量v不能从静态上下文中引用。
变量's'不是静态的!
答案 0 :(得分:5)
您试图以静态方式引用v,这就是问题所在。每当你执行ClassName.fieldName
时,这意味着你以静态方式访问资源。首先必须实例化该类,然后执行myReferenceVariable.fieldName
public class example{
example2 myExample = new example2();
int s = myExample.v;
这应该有用。
还要记住Java命名约定的类名以大写字母开头。不是恭维问题,而是可读性问题。
答案 1 :(得分:0)
不,s
绝对不是静态的。但v
也不是。{1}}。这是你的编译器告诉你的。
由于变量确实是包范围,因此您可以实例化一个新的example2
类并直接调用它。
new example2().v;
一般情况下,您希望将来使用getter和setter。这允许封装和信息隐藏,因为变量v
完全开放,可以被该包中的任何其他类修改。