为什么非静态变量/方法在静态方法中不可访问



需要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的面向对象方法时,它们有点像反模式。

最新更新