java - Web应用程序中Java静态成员的范围

标签 java static

Java 静态变量是否在同一 Web 应用程序的实例之间共享?

class MyClass
{
    private static SomeClass myStaticObject = new SomeClass();
}

如果网络应用程序使用 MyClass 并且该应用程序的多个实例在网络服务器上运行,myStaticObject 是否被多次初始化?

最佳答案

通常,是的。大多数容器将为每个 Web 应用程序提供单独的类加载器。这将导致类在被多个应用程序使用时被多次加载,从而导致静态变量的多个实例。

说明 Java Language Specification供引用:

At run time, several reference types with the same binary name may be loaded simultaneously by different class loaders. These types may or may not represent the same type declaration. Even if two such types do represent the same type declaration, they are considered distinct.

据此推断,静态变量的多个实例将存在,除非类仅由父类加载器加载一次,并且从未被任何其他类加载器加载到别处。

关于java - Web应用程序中Java静态成员的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389281/

相关文章:

c++ - 跨系统静态成员初始化

wpf - 绑定(bind)源 vs x :Static

java - 什么是 "static"?

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 无法在 JavaFX 表中显示颜色

Java 数组列表 : check if an id is in the list

java - 为什么引用静态变量时要包含类名?

java - 在java中,如何创建一个根据以前的方法对对象进行分类的方法?

java - 使用 Maven 单独执行测试

java - 添加到数组列表