Область применения статического члена Java в веб-приложениях - PullRequest
7 голосов
/ 17 июня 2011

Являются ли статические переменные Java общими для экземпляров одного и того же веб-приложения?

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

Если веб-приложение использует MyClass и несколько экземпляров этого приложения выполняются на веб-сервере, myStaticObject инициализируется несколько раз?

Ответы [ 2 ]

9 голосов
/ 17 июня 2011

Обычно да. Большинство контейнеров предоставляют отдельные загрузчики классов для каждого веб-приложения. Это приведет к тому, что класс будет загружен несколько раз при использовании несколькими приложениями, что приведет к нескольким экземплярам статической переменной.

С указанием спецификации языка Java для справки:

Во время выполнения, несколько типов ссылок с тем же двоичным именем может быть загружаются одновременно разными грузчики класса. Эти типы могут или могут не представляют один и тот же тип декларация. Даже если два таких типа представляют одно и то же объявление типа, они считаются различными.

Выводом: несколько экземпляров статических переменных будут существовать, если только классы не загружаются только родительским загрузчиком классов и никогда не загружаются в другом месте любым другим загрузчиком классов.

0 голосов
/ 17 июня 2011

Я не совсем вижу смысла в переменной private static в MyClass. Если это private, вы не можете получить к нему доступ как к переменной класса из-за пределов класса, в котором вы ее определили. Если вы просто хотите, чтобы другие классы обращались к этой переменной через метод получения, вы должны удалить ключевое слово static.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...