Что такое статический вложенный класс в Java?

«Что такое статический вложенный класс в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статический вложенный класс (static nested class) — это класс, объявленный внутри другого класса с модификатором static. Он логически связан с внешним классом, но не имеет доступа к его нестатическим членам.

Основные характеристики:

  • Не требует экземпляра внешнего класса. Создается независимо: new OuterClass.StaticNestedClass().
  • Имеет доступ только к статическим членам внешнего класса.
  • Может быть публичным, приватным или защищенным.
  • Часто используется для логической группировки классов, реализации вспомогательных структур данных (например, Map.Entry) или построителей (Builder Pattern).

Пример:

public class OuterClass {
    private static String staticField = "Static Field";
    private String instanceField = "Instance Field";

    // Статический вложенный класс
    public static class StaticNestedClass {
        public void print() {
            System.out.println(staticField); // OK: доступ к статическому полю
            // System.out.println(instanceField); // ОШИБКА: нет доступа к нестатическому полю
        }
    }
}

// Использование
OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass();
nestedObj.print();

Сравнение с нестатическим (внутренним) классом: Статический вложенный класс не хранит скрытую ссылку на экземпляр внешнего класса, поэтому он более эффективен по памяти и не мешает сборке мусора.