Статический Вложенный Класс можно Инстанцировать Многократно?

Учитывая то, что я знаю любого типа статической функции программирования – я думал бы, что ответ является 'нет'. Однако наблюдение операторов как OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); заставляет меня задаться вопросом.

22
задан stormin986 27 April 2010 в 07:50
поделиться

3 ответа

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

public class MultipleNested {
    static class Nested {
    }
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Nested();
        }
    }
}

См. Также


Теперь, конечно, вложенный тип может управлять своим собственным экземпляром (например, частными конструкторами, одноэлементным шаблоном и т. Д.), Но это не имеет ничего общего с тем фактом, что это вложенный тип. Кроме того, если вложенный тип представляет собой статическое перечисление , конечно, вы вообще не можете создать его экземпляр.

Но в целом да, вложенный тип static может быть создан несколько раз.

Обратите внимание, что технически вложенный тип static не является «внутренним» типом.

JLS 8.1.3 Внутренние классы и закрывающие экземпляры

внутренний класс - это вложенный класс, который не объявлен явно или неявно static .

То есть, согласно терминологии JLS, внутренний класс - это не статический класс. Если это статический , то это просто вложенный тип.


Итак, что означает static ?

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

См. Также

31
ответ дан 29 November 2019 в 04:46
поделиться

Это законно. Тот факт, что внутренний класс статичен, дает вам здесь преимущество; его экземпляры не привязаны к какому-либо экземпляру содержащего класса, поэтому они могут быть свободно созданы (если это позволяет квалификатор доступа).

Цена, однако, заключается в том, что внутренний класс не может использовать нестатические члены / методы содержащего класса.

3
ответ дан 29 November 2019 в 04:46
поделиться

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

Может быть, причина, по которой вы это видите, в том, что программа подумала о том, чтобы где-то сохранить ссылку. Хотя я согласен с вами, это кажется странным: S

0
ответ дан 29 November 2019 в 04:46
поделиться
Другие вопросы по тегам:

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