需要JVM方面的原因。非常感谢对JVM流程的解释(简单地说(。
静态变量和方法不属于对象,但它们存在于最外层。
相反,非静态变量和方法属于实例化对象。
这意味着静态方法无法访问非静态变量和方法,因为静态方法没有可操作的对象。
让我举一个例子:
想象一下Foo类被定义为
public class Foo{
public static int a;
}
我们可以进行这样的操作
public static int main(String[] args){
Foo.a = 10;
int b = Foo.a - 5;
}
而不实例化对象
Foo foo = new Foo();
现在想想下面的类
public class Bar{
int a = 10;
public static void doSomething(){
this.a = 5;
}
}
我们知道关键字this
指的是正在使用的对象,但doSomething()
它没有链接到对象,那么this
指的是什么对象?
这就是为什么我们不能访问静态方法中的非静态变量和方法。
因此,要理解这一点,您首先不需要了解什么是静态方法。基本上,静态方法是类中的一种方法,即使在类尚未启动时也可以调用。
这些静态方法(或变量(独立于类的任何初始化而存在。
一般来说,应该避免任何静态的东西,因为当涉及到java的面向对象方法时,它们有点像反模式。