@Mikhail_dev

(Java) static nested class — это единственный объект или их может быть много?

Здравствуйте.

Я со времен курсов по программированию и прочих книжек вроде Блоха и Хорстманна, помню что static - это по сути единственный объект (в рамках одной виртуальной машины).
Один мой знакомый сказал, что вложенный статический класс вовсе не singleton так сказать и может быть в множестве экземпляров. Ответ на это дело я так и не смог найти ни в документации в Oracle к nested class, ни на stackoverflow.
То, что данный класс не содержит ссылку на внешний объект - это понятно, но мне это никак не помогает в размышлениях о данном случае.
  • Вопрос задан
  • 2530 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bimeg
Статик как раз и нужен чтобы не было ссылки на внешний класс.
Если смотреть глобальнее то static значит "не нужен инстанс внешнего класса".
Статическую филду\метод можно прочитать\вызвать не имея инстанса внешнего класса.
Можно создать объект статического вложенного класса не имея инстанса внешнего класса.
Ответ написан
@Power
Сам класс (мета-сущность - инстанс класса java.lang.Class<OuterClass.InnerStaticClass>) существует в единственном экземпляре, но это относится к любому классу (если не углубляться в класслоадеры). А вот инстансов класса OuterClass.InnerStaticClass можно сделать сколько угодно (на это влияет доступность конструкторов, как обычно):
new OuterClass.InnerStaticClass();
Единственное отличие внутреннего статического класса от внутреннего нестатического - ему не требуется инстанс окружающего класса для создания (ну и после создания он не имеет ссылки на этот самый инстанс окружающего класса):
new OuterClass.InnerNonStaticClass(); // нельзя
OuterClass o = new OuterClass();
new o.InnerNonStaticClass(); // можно
new OuterClass.InnerStaticClass(); // а в случае со статическим классом так можно

Не путайте статический класс со статическими полями класса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы