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
}
错误:无法对非静态字段名称进行静态引用
答案 0 :(得分:6)
导致问题的原因是main
是静态方法,这意味着它没有接收器对象。换句话说,它不会相对于某个对象运行。因此,如果您尝试查找非静态字段,那么Java会对该字段所在的对象感到困惑。通常,它会假定该字段位于调用该方法的对象中,但是因为{{1}是静态的,这个对象不存在。
作为一般规则,您无法从静态方法访问常规实例变量。
答案 1 :(得分:2)
要访问非静态成员变量和函数,您必须具有特定对象。 (例如,如果所有内容都在class Bob { ... }
内,您需要执行类似
Bob bob = new Bob();
System.out.println(bob.name);
在你的主要内部。
答案 2 :(得分:0)
name是一个实例变量,您试图在不创建对象的情况下访问它,因此从技术上讲,name变量在内存中不存在,但是对于静态变量(s_name),它是一个类变量,类创建后就存在了。