Java 为什么多个小程序可以访问一个全局类?

Java 为什么多个小程序可以访问一个全局类?,java,static,applet,jvm,Java,Static,Applet,Jvm,几年前,我有一个相当复杂的applet结构,我有一个关于其中一个全局类的问题。基本上,我在同一个页面上有三个小程序,它们以不同的方式相互作用。我感到困惑的是,它们都共享来自同一类的全局(静态)变量。这到底是怎么发生的?我的印象是,每个applet都有自己的小环境,因此无法访问与其他applet相同的静态变量?例如,如果小程序A中有此项: Globals.globalVar = 5; 在小程序B中: int x = Globals.globalVar; 我保证B在A之后开始,然后x变成5。我想

几年前,我有一个相当复杂的applet结构,我有一个关于其中一个全局类的问题。基本上,我在同一个页面上有三个小程序,它们以不同的方式相互作用。我感到困惑的是,它们都共享来自同一类的全局(静态)变量。这到底是怎么发生的?我的印象是,每个applet都有自己的小环境,因此无法访问与其他applet相同的静态变量?例如,如果小程序A中有此项:

Globals.globalVar = 5;
在小程序B中:

int x = Globals.globalVar;

我保证B在A之后开始,然后x变成5。我想知道在JVM中是如何处理的,因为这对我来说没有什么意义。这种行为是否意味着如果两个单独的java应用程序同时运行,它们可以访问彼此的静态变量?事先谢谢。

因为这就是它的定义,因为向后兼容的原因。见:

通常,如果两个小程序具有相同的代码库和存档 参数,它们将由相同的类装入器实例装入。 此行为是向后兼容所必需的,并且依赖于 通过几个实际应用程序。结果是多个 同一网页上的小程序可以访问彼此的静态变量 在Java语言级别,有效地允许多个小程序 将其编写为一个应用程序

而此功能使某些类型的应用程序能够 它写得很方便,但也有一些缺点。干扰 小程序的终止,特别是当 相同的小程序处于活动状态。它为小程序建立了编程模型 更复杂,因为它在静态 小程序的字段将被重新初始化,并在何时被初始化 在同一小程序的运行之间进行维护。它会导致不精确 Java插件中某些用户界面操作的行为 由于无法准确识别哪个小程序启动了 特别要求

因此,新的Java插件提供了一种退出 逐个小程序使用classloader缓存


因为这就是它的定义,因为向后兼容的原因。见:

通常,如果两个小程序具有相同的代码库和存档 参数,它们将由相同的类装入器实例装入。 此行为是向后兼容所必需的,并且依赖于 通过几个实际应用程序。结果是多个 同一网页上的小程序可以访问彼此的静态变量 在Java语言级别,有效地允许多个小程序 将其编写为一个应用程序

而此功能使某些类型的应用程序能够 它写得很方便,但也有一些缺点。干扰 小程序的终止,特别是当 相同的小程序处于活动状态。它为小程序建立了编程模型 更复杂,因为它在静态 小程序的字段将被重新初始化,并在何时被初始化 在同一小程序的运行之间进行维护。它会导致不精确 Java插件中某些用户界面操作的行为 由于无法准确识别哪个小程序启动了 特别要求

因此,新的Java插件提供了一种退出 逐个小程序使用classloader缓存