2013-01-04 58 views
0

我想了解保护和封装acesses的想法,我已经试过编译器,但它不停地告诉我,有一个问题保护和包访问

public class example{ 

    int s = example2.v; 

    public static void main(String args[]){ 


    } 
} 

public class example2 { 

    int v = 0 ; 

} 

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

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

变量's'不是静态的!

+0

请通过以下链接:http://www.javatutorialhub.com/java-static-variable-methods.html –

+0

http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced -from-a-static-context-java 检查此.. – Sanath

回答

5

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

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

这应该工作。

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

+0

谢谢!这很奇怪,因为在我的Java书中,它说我可以通过名称访问它! – Hamad

+0

@HamadBinAbdullah没问题!这可能是他们的错字。 –

+0

我不知道,这是PEARSON的绝对Java第四版。他们重复了很多次!对不起,点击这个人,不仅对你不尊重我,还对其他因为我在这里是新手而回答我的人产生了不满。 – Hamad

0

不,s绝对不是静态的。但是v也不是。这是你的编译器告诉你的。

由于该变量确实是包的范围,因此您可以实例化一个新的example2类并直接调用它。

new example2().v; 

一般而言,您希望将来使用getters和setters。这允许封装和信息隐藏,因为该变量v完全打开以供该包中的任何其他类修改。