为什么从main读取非静态变量有问题?

时间:2011-01-12 03:29:27

标签: java static

String name = "Marcus";
static String s_name = "Peter";

public static void main(String[] args) {    
    System.out.println(name);//ERROR
    System.out.println(s_name);//OK
}

错误:无法对非静态字段名称进行静态引用

3 个答案:

答案 0 :(得分:6)

导致问题的原因是main是静态方法,这意味着它没有接收器对象。换句话说,它不会相对于某个对象运行。因此,如果您尝试查找非静态字段,那么Java会对该字段所在的对象感到困惑。通常,它会假定该字段位于调用该方法的对象中,但是因为{{1}是静态的,这个对象不存在。

作为一般规则,您无法从静态方法访问常规实例变量。

答案 1 :(得分:2)

要访问非静态成员变量和函数,您必须具有特定对象。 (例如,如果所有内容都在class Bob { ... }内,您需要执行类似

的操作
Bob bob = new Bob(); 
System.out.println(bob.name);

在你的主要内部。

答案 2 :(得分:0)

在这种情况下,

name是一个实例变量,您试图在不创建对象的情况下访问它,因此从技术上讲,name变量在内存中不存在,但是对于静态变量(s_name),它是一个类变量,类创建后就存在了。

相关问题