首页 > 解决方案 > java中的静态变量和方法在哪里加载?

问题描述

我有点困惑静态变量和方法在哪里加载。我们说静态变量和方法加载在静态内存中。bt public static void main() 被加载到堆栈中。由于 main() 方法也是静态的,那么 main 是如何加载到堆栈中的。还有就是静态方法和变量存储在不同的位置,因为我们说方法加载在内存中的不同位置。

标签: java

解决方案


这个的实际实现不是很有用,也不是很容易理解。但是,它的模型可能会帮助您了解这些东西的用途。

首先,数据和代码在 Java 中是完全不同的动物。变量将具有在运行时更改的值;代码从不这样做。所以当你实例化一个类时,你永远不会得到另一个代码副本。

考虑类Class- 它的实例存在,程序中每个完全限定的类都有一个。我认为一个类的所有代码,不管是静态的还是非静态的,都与它的Class实例相关联——如果你愿意,可以用它“加载”它。顺便说一句,这也是我认为它的静态变量被“加载”的地方。

但是实例变量需要多个副本——无论何时实例化类,都需要它们的另一个副本。因此,它们在实例化时与类的实例相关联(或加载)——将指向类的指针视为指向包含该类的所有实例变量的结构的指针,以及指向其方法的跳转表的指针, ETC。

我不知道您所说的public static void main“加载到堆栈上”是什么意思。你是说代码吗?代码本身永远不会进入堆栈。将(普通)类中的代码放在堆栈上,在当前方法返回时丢失,然后在调用该方法时必须再次加载它是没有任何意义的。

我认为你的问题有一部分我没有回答,因为我不明白你在问什么。


推荐阅读