Область действия статического члена класса Java - PullRequest
4 голосов
/ 01 ноября 2010

Я занимаюсь разработкой веб-приложения с использованием Java / JSP.В одном классе, скажем, Student, есть статический член static private int _nextID;

Я хочу знать, является ли этот _nextID одинаковым среди всех пользовательских сессий?Или каждая сессия имеет свой собственный _nextID?

Ответы [ 2 ]

6 голосов
/ 01 ноября 2010

В простом случае можно предположить, что несколько экземпляров Student будут использовать одно и то же статическое поле nextID.Однако следует подумать не только о простом случае (или документе, которого у вас нет).В этом случае все в порядке, если только поля экземпляра id, полученные из счетчика nextID, не распространятся в более крупное приложение, где идентификаторы должны быть уникальными.В этом случае вам нужен более надежный генератор идентификаторов (может быть, вам нужен UUID ; может быть, вам нужен первичный ключ в базе данных; может быть, что-то еще).

Спросите себя внимательно, чтонеобходимая область уникальных идентификаторов.Затем найдите решение, которое решает эту проблему, и задокументируйте его в классе.

В общем , статические поля внутри класса с тем же именем, но загруженные различными загрузчиками классов (в том же или вразные JVM) могут быть разными экземплярами, что люди чаще всего замечают при попытке реализовать шаблон Singleton .Таким образом, область действия вашей статической переменной зависит (в сложных случаях) от соответствующих загрузчиков классов.Еще несколько (недавних) подробностей о пространствах имен Java, определенных classloader, здесь и здесь .

Относится к SO: Разница между Thread.getContextClassLoader() ....

0 голосов
/ 01 ноября 2010

Это зависит от контейнера приложения и конфигурации.

Статический член будет одинаковым для всех сеансов, работающих в экземпляре JVM, но ваша конфигурация может создавать несколько экземпляров.

Если вы хотите сохранить постоянство и переносимость, не стоит полагаться на то, что он одинаков во всех сеансах. Это также может позволить вам масштабировать до нескольких машин, если это необходимо, без изменения этого кода.

...