Java “在foo类的公共方法中,哪个变量(实例或局部)起作用?”

Java “在foo类的公共方法中,哪个变量(实例或局部)起作用?”,java,Java,它似乎是使用局部变量的方法!!!!我原以为它会在调用静态方法的非静态变量时出错,但事实并非如此 public class foo{ int x = 12; public static void go(final int x){ System.out.println(x); } } 实际上它没有一个有趣的错误 System.out.println(x) 将打印方法go的参数 如果要访问类的字段,请在方法不是静态的情况下使用此keyworld: Syste

它似乎是使用局部变量的方法!!!!我原以为它会在调用静态方法的非静态变量时出错,但事实并非如此

public class foo{
    int x = 12;
    public static void go(final int x){
        System.out.println(x);
    }
}
实际上它没有一个有趣的错误

System.out.println(x)
将打印方法go的参数

如果要访问类的字段,请在方法不是静态的情况下使用此keyworld:

System.out.println(this.x)
在您的情况下,您需要有一个foo类的实例并使用

foo f = new foo();
System.out.println(f.x);

实例变量x在go方法的上下文中根本不存在,因为该方法是静态的。它能看到的唯一x是参数。你需要了解静态的含义。非静态字段x属于类的实例。在实例之外访问它是没有意义的。这就像当你创建100个Person实例时说Person类的名字一样,谁的名字?john.name或jane.name等。在静态方法中,您不在任何实例中,静态方法属于该类。因此,非静态x字段仅在由new创建的foo类的实例中已知。使用此字段不起作用,因为函数是StaticSpectabularBob是正确的