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

时间:2011-06-17 17:12:18

标签: java static

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

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

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

2 个答案:

答案 0 :(得分:9)

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

说明Java Language Specification以供参考:

  

在运行时,有几种引用类型   具有相同的二进制名称可能是   由不同的同时加载   班级装载机。这些类型可能或可能   不代表相同的类型   宣言。即使有两种这样的类型   表示相同的类型声明,   他们被认为是截然不同的。

通过推理,将存在多个静态变量实例,除非这些类仅由父类加载器加载一次,并且永远不会被任何其他类加载器加载到别处。

答案 1 :(得分:-1)

我不太明白在private static中有一个MyClass变量。如果是private,则无法从您定义的类外部将其作为类变量访问。如果您只是希望其他类通过getter方法访问此变量,则应删除static关键字。< / p>