Ответ
Статический вложенный класс (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();
Сравнение с нестатическим (внутренним) классом: Статический вложенный класс не хранит скрытую ссылку на экземпляр внешнего класса, поэтому он более эффективен по памяти и не мешает сборке мусора.