TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10K subscribers
Post #1343 2.96K
Какие существуют типы в Java?

В качестве типа переменной в Java может использоваться одна из пяти сущностей:

1. примитивный тип;
2. class – сложный тип, с поведением (API), возможно его реализацией и внутренним состоянием;
3. enum – перечисление. Тип с заданным конечным набором возможных значений;
4. interface – только описание поведения, без состояния. С Java 8 может иметь дефолтную реализацию. Возможно множественное наследование интерфейсов;
5. @ interface – аннотация. Пассивная метаинформация уровня класса: само ее наличие, параметры и поведение. Обычно используется для описания особых свойств (@Deprecated), для использования фреймворками (@Test) или инструментами разработки (@NotNull);

Новые примитивы создавать пока нельзя. Остальные типы называются ссылочными – переменная несет не значение, а ссылку на экземпляр. Для каждого ссылочного типа при компиляции создается отдельный .class файл. Его содержимое рассмотрим позднее.

Теме посвящена глава 8 спецификации.

Класс бывает:
1. Абстрактный – помеченный ключевым словом abstract. Не может иметь экземпляры, может иметь нереализованные абстрактные методы, также с модификатором abstract и без тела. Похож на частично реализованный интерфейс с состоянием, хотя с точки зрения JVM это совсем другая сущность;
2. Внутренний (inner, non-static nested) – объявленный внутри другого класса. Не может иметь статических объявлений. Имеет доступ ко всем внутренностям экземпляра внешнего класса. Если член внешнего класса foo перекрыт членом внутреннего (shadowing), обратиться к внешнему можно с помощью конструкции OuterClassname.this.foo, без перекрытия сработает просто foo. Инстанциируется только от экземпляра внешнего класса: outer.new Inner();
3. Вложенный (nested, inner static) – имеет доступ ко всем статическим членам внешнего класса. В остальном ничем не отличается от обычного класса;
4. Локальный – объявленный внутри метода. Является внутренним классом, в случае объявления в статическом методе без доступа к экземпляру внешнего класса. Не имеет модификаторов доступа;
5. Анонимный – локальный класс, объявленный без имени, непосредственно при инстанциировании, расширением другого класса или интерфейса. В отличие от других вложенных классов, анонимный может расширять только один класс или интерфейс. Не может быть абстрактным или финальным. Лямбда-выражение является сокращенной записью создания объекта анонимного наследника функционального интерфейса;
6. Финальный – с модификатором final, нерасширяемый;

Внутренние и вложенные классы могут иметь несколько уровней вложенности. Модификаторы abstract и final несовместимы, но по отдельности применимы к различным внутренним классам (кроме анонимного). Подробно разные виды вложенных классов рассмотрены в официальном туториале.

#Классы
  • 👍 13
  • 👎 2
More from @bookjava
  1. Oct 5, 2026🧠 Dependency Inversion Principle (D в SOLID) Зависимости должны идти от высокоуровневой п…
  2. Sep 30, 2026Три похожих слова в Java — final, finally, finalize — но смысл у них совершенно разный. Ра…
  3. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  4. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  5. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  6. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →