0

我试图理解受保护和打包访问的想法,我已经在编译器上尝试过它们,但它一直告诉我有问题

public class example{

    int s = example2.v;

    public static void main(String args[]){


    }
} 

public class example2 {

    int v = 0 ;

}

谁能帮我这个?为什么它说:

不能从静态上下文引用非静态变量 v。

变量's'不是静态的!

4

2 回答 2

5

您试图以静态方式引用 v ,这就是问题所在。每当您这样做时ClassName.fieldName,就意味着您正在以静态方式访问资源。你首先必须实例化类然后做myReferenceVariable.fieldName

public class example{
    example2 myExample = new example2();
    int s = myExample.v;

这应该有效。

还要记住 Java 命名约定的类名以大写字母开头。不是编译的问题,而是可读性的问题。

于 2013-01-04T02:04:11.647 回答
0

不,s绝对不是静态的。但两者都不是v。这就是你的编译器告诉你的。

由于变量确实是包作用域,所以可以实例化一个新example2类,直接调用。

new example2().v;

通常,您将来会希望使用 getter 和 setter。这允许封装和信息隐藏,因为该变量v是完全开放的,可以被该包中的任何其他类修改。

于 2013-01-04T02:06:46.483 回答