Java 为什么从main读取非静态变量时会出现问题?

Java 为什么从main读取非静态变量时会出现问题?,java,static,Java,Static,错误:无法对非静态字段名进行静态引用导致问题的原因是main是一个静态方法,这意味着它没有接收器对象。换句话说,它不相对于某个对象进行操作。因此,如果您试图查找一个非静态字段,那么Java会对该字段所在的对象感到困惑。通常,它会假定字段位于调用方法的对象中,但由于main是静态的,因此该对象不存在 一般来说,您不能从静态方法访问常规实例变量。要访问非静态成员变量和函数,必须具有特定的对象。(例如,如果所有内容都在类Bob{…}中,则需要执行以下操作 String name = "Marcus";

错误:无法对非静态字段名进行静态引用导致问题的原因是
main
是一个静态方法,这意味着它没有接收器对象。换句话说,它不相对于某个对象进行操作。因此,如果您试图查找一个非静态字段,那么Java会对该字段所在的对象感到困惑。通常,它会假定字段位于调用方法的对象中,但由于
main
是静态的,因此该对象不存在


一般来说,您不能从静态方法访问常规实例变量。

要访问非静态成员变量和函数,必须具有特定的对象。(例如,如果所有内容都在
类Bob{…}
中,则需要执行以下操作

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
}

在main中。

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

与非静态方法的问题相同。从技术上看,您操作的对象是类本身。我也不会说它是一个一般规则……我会说它是一个规则。我也不会说Java“变得混乱”。它没有什么可混淆的。有没有实例对象。句号。因此无法访问实例字段。(感谢您的编辑。我最近似乎写了太多Ruby。)
Bob bob = new Bob(); 
System.out.println(bob.name);