Java静态变量是否在同一Web应用程序的实例之间共享?
class MyClass
{
private static SomeClass myStaticObject = new SomeClass();
}
如果Web应用程序使用 MyClass 并且该应用程序的多个实例在Web服务器上运行, myStaticObject 是否已多次初始化?
答案 0 :(得分:9)
通常,是的。大多数容器将为每个Web应用程序提供单独的类加载器。这会导致在多个应用程序使用时多次加载类,从而导致静态变量的多个实例。
说明Java Language Specification以供参考:
在运行时,有几种引用类型 具有相同的二进制名称可能是 由不同的同时加载 班级装载机。这些类型可能或可能 不代表相同的类型 宣言。即使有两种这样的类型 表示相同的类型声明, 他们被认为是截然不同的。
通过推理,将存在多个静态变量实例,除非这些类仅由父类加载器加载一次,并且永远不会被任何其他类加载器加载到别处。
答案 1 :(得分:-1)
我不太明白在private static
中有一个MyClass
变量。如果是private
,则无法从您定义的类外部将其作为类变量访问。如果您只是希望其他类通过getter方法访问此变量,则应删除static
关键字。< / p>