Внутренний класс, по определению , не может быть статическим, поэтому я собираюсь переделать ваш вопрос как «Что В чем разница между статическими и нестатическими вложенными классами? "
Нестатический вложенный класс имеет полный доступ к членам класса, внутри которого он вложен. Статический вложенный класс не имеет ссылки на экземпляр вложенности, поэтому статический вложенный класс не может вызывать нестатические методы или получать доступ к нестатическим полям экземпляра класса, в котором он вложен.
Обсуждение вложенных классов ...
Разница в том, что объявление вложенного класса, которое также является статическим, может быть создано за пределами включающего класса.
Когда у вас есть объявление вложенного класса, которое не статично , Java не позволит вам создать его экземпляр, кроме как через включающий класс. Объект, созданный из внутреннего класса, связан с объектом, созданным из внешнего класса, поэтому внутренний класс может ссылаться на поля внешнего.
Но если он static , то ссылка не существуют, внешние поля недоступны (кроме как через обычную ссылку, как любой другой объект), и поэтому вы можете создать экземпляр вложенного класса отдельно.
Давайте посмотрим на источник мудрости для таких вопросов: Эффективная Java Джошуа Блоха :
Технически не существует такой вещи, как статический внутренний класс. Согласно Эффективная Java , правильная терминология - это статический вложенный класс . Нестатический вложенный класс действительно является внутренним классом, наряду с анонимными классами и локальными классами.
А теперь процитируем:
Каждый экземпляр нестатического вложенного класса неявно связан с включающим экземпляром содержащего его класса ... Возможно для вызова методов включающего экземпляра.
Статический вложенный класс не имеет доступа к включающему экземпляру. Он также занимает меньше места.