static用法 - java静态常量初始化



Java应用程序中静态成员的范围 (2)

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

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

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

https://src-bin.com


Answer #1

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


Answer #2

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

说明Java语言规范以供参考:

在运行时,具有相同二进制名称的几个引用类型可以由不同的类加载器同时加载。 这些类型可能表示或不表示相同的类型声明。 即使两个这样的类型代表相同的类型声明,它们也被认为是不同的。

通过推论,将存在多个静态变量实例,除非这些类只能由父类加载器加载一次,并且不会由其他类加载器加载到别处。





static