Статический внутренний класс в Java - это класс, объявленный внутри другого класса с использованием ключевого слова static
. Основное отличие статического внутреннего класса от нестатического заключается в том, что статический внутренний класс имеет прямой доступ только к статическим полям и методам внешнего класса.
Рассмотрим пример, который прояснит это:
public class OuterClass {
static int staticVariable = 10;
int nonStaticVariable = 20;
static class StaticInnerClass {
void display(){
System.out.println(staticVariable); // доступ к статической переменной внешнего класса
System.out.println(nonStaticVariable); // Это приведет к ошибке компиляции
}
}
}
В приведенном примере StaticInnerClass
может обратиться к staticVariable
, потому что она является статической переменной внешнего класса. Однако попытка обратиться к nonStaticVariable
приведет к ошибке компиляции, так как это нестатическое поле внешнего класса.
С другой стороны, нестатический внутренний класс (известный также как внутренний класс) может обращаться к любым членам внешнего класса, независимо от того, являются ли они статическими или нет.
Мы должны использовать статический внутренний класс, когда его поведение не должно зависеть от его внешнего класса. С другой стороны, нестатический внутренний класс используется, когда его поведение связано с внешним классом.
Основное преимущество использования статического внутреннего класса - это экономия памяти. Поскольку статический внутренний класс не имеет ссылки на внешний класс, создание его экземпляра требует меньше памяти по сравнению с экземпляром нестатического внутреннего класса.