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

Sam*_*Sam 8 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
}
Run Code Online (Sandbox Code Playgroud)

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

tem*_*def 6

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

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