Содержание
- 1. Введение
- 2. Грамматики
- 3. Лексическая структура
- 4. Типы, значения и переменные
- 5. Преобразования и контексты
-
- 5.1. Виды преобразования
-
- 5.1.1. Идентичное преобразование
- 5.1.2. Расширяющее преобразование примитивного типа
- 5.1.3. Сужающее преобразование примитивного типа
- 5.1.4. Расширяющее и сужающее преобразование примитивного типа
- 5.1.5. Расширяющее преобразование ссылочного типа
- 5.1.6. Сужающее преобразование ссылочного типа
- 5.1.7. Преобразование в ящик
- 5.1.8. Преобразование из ящика
- 5.1.9. Непроверенное преобразование
- 5.1.10. Преобразование захвата
- 5.1.11. Преобразование строки
- 5.1.12. Запрещённые преобразования
- 5.2. Контексты присваивания
- 5.3. Контексты вызова
- 5.4. Строковые контексты
- 5.5. Контексты приведения типов
- 5.6. Численные контексты
- 6. Имена
-
- 6.1. Объявления
- 6.2. Имена и идентификаторы
- 6.3. Область видимости объявления
- 6.4. Затенение и маскировка
- 6.5. Определение смысла имени
- 6.6. Управление доступом
- 6.7. Полные имена и канонические имена
- 7. Пакеты и модули
- 8. Классы
-
- 8.1. Объявления классов
- 8.2. Члены класса
- 8.3. Объявления полей
- 8.4. Объявления методов
- 8.5. Объявления внутренних классов и интерфейсов
- 8.6. Инициализаторы экземпляров
- 8.7. Статические инициализаторы
- 8.8. Объявления конструкторов
-
- 8.8.1. Формальные параметры
- 8.8.2. Подпись конструктора
- 8.8.3. Модификаторы конструкторов
- 8.8.4. Обобщённые конструкторы
- 8.8.5. Бросаемые исключения конструктором
- 8.8.6. Тип конструктора
- 8.8.7. Тело конструктора
- 8.8.8. Перегрузка конструкторов
- 8.8.9. Конструктор по умолчанию
- 8.8.10. Предотвращение создания экземпляра класса
- 8.9. Классы перечислений
- 8.10. Классы записей
- 9. Интерфейсы
-
- 9.1. Объявления интерфейсов
- 9.2. Члены интерфейса
- 9.3. Объявления полей (констант)
- 9.4. Объявления методов
- 9.5. Объявления вложенных классов и интерфейсов
- 9.6. Интерфейсы аннотаций
- 9.7. Аннотации
- 9.8. Функциональные интерфейсы
- 9.9. Типы функций
- 10. Массивы
- 11. Исключения
- 12. Выполнение
-
- 12.1. Запуск виртуальной машины Java
- 12.2. Загрузка классов и интерфейсов
- 12.3. Связывание классов и интерфейсов
- 12.4. Инициализация классов и интерфейсов
- 12.5. Создание новых экземпляров классов
- 12.6. Заключительная стадия экземпляров классов
- 12.7. Выгрузка классов и интерфейсов
- 12.8. Выход из программы
- 13. Двоичная совместимость
-
- 13.1. Формат двоичного файла
- 13.2. Что такое и что не является бинарной совместимостью
- 13.3. Эволюция пакетов и модулей
- 13.4. Эволюция классов
-
- 13.4.1.
abstractКлассы - 13.4.2.
sealed,non-sealedиfinalклассы - 13.4.3.
publicклассы - 13.4.4. Родительские классы и интерфейсы
- 13.4.5. Параметры типа класса
- 13.4.6. Тело класса и объявления членов
- 13.4.7. Доступ к членам и конструкторам
- 13.4.8. Объявления полей
- 13.4.9.
finalполя иstaticконстанты - 13.4.10.
staticполя - 13.4.11.
transientполя - 13.4.12. Объявления методов и конструкторов
- 13.4.13. Параметры типа методов и конструкторов
- 13.4.14. Формальные параметры методов и конструкторов
- 13.4.15. Тип результата метода
- 13.4.16.
abstractметоды - 13.4.17.
finalметоды - 13.4.18.
nativeметоды - 13.4.19.
staticметоды - 13.4.20.
synchronizedметоды - 13.4.21. Исключение методов и конструкторов
- 13.4.22. Тело метода и конструктора
- 13.4.23. Перегрузка методов и конструкторов
- 13.4.24. Переопределение методов
- 13.4.25. Статические инициализаторы
- 13.4.26. Эволюция классов перечислений
- 13.4.27. Эволюция классов записей
- 13.4.1.
- 13.5. Эволюция интерфейсов
- 14. Блоки, операторы и шаблоны
-
- 14.1. Нормальное и внезапное завершение операторов
- 14.2. Блоки
- 14.3. Объявления локальных классов и интерфейсов
- 14.4. Объявления локальных переменных
- 14.5. Операторы
- 14.6. Пустой оператор
- 14.7. Операторы с метками
- 14.8. Операторы выражений
- 14.9. Оператор
if - 14.10. Оператор
assert - 14.11. Оператор
switch - 14.12. Оператор
while - 14.13. Оператор
do - 14.14. Оператор
for - 14.15. Оператор
break - 14.16. Оператор
continue - 14.17. Оператор
return - 14.18. Оператор
throw - 14.19. Оператор
synchronized - 14.20. Оператор
try - 14.21. Оператор
yield - 14.22. Недостижимые операторы
- 14.30. Шаблоны
- 15. Выражения
-
- 15.1. Оценка, обозначение и результат
- 15.2. Формы выражений
- 15.3. Тип выражения
- 15.4. Выражения с плавающей точкой
- 15.5. Выражения и проверки во время выполнения
- 15.6. Нормальное и прерывистое завершение оценки
- 15.7. Порядок оценки
- 15.8. Первичные выражения
- 15.9. Выражения создания экземпляров классов
- 15.10. Массивы: Создание и доступ к выражениям
- 15.11. Выражения доступа к полям
- 15.12. Выражения вызова методов
-
- 15.12.1. Шаг компиляции 1: Определить тип для поиска
- 15.12.2. Шаг компиляции 2: Определить сигнатуру метода
-
- 15.12.2.1. Идентификация потенциально применимых методов
- 15.12.2.2. Фаза 1: Идентификация методов с совпадающей арностью, применимых по строгому вызову
- 15.12.2.3. Фаза 2: Идентификация методов с совпадающей арностью, применимых по свободному вызову
- 15.12.2.4. Фаза 3: Идентификация методов, применимых по вызову с переменной арностью
- 15.12.2.5. Выбор наиболее специфичного метода
- 15.12.2.6. Тип вызова метода
- 15.12.3. Шаг компиляции 3: Выбранный метод подходит?
- 15.12.4. Оценка выражений вызова метода во время выполнения
- 15.13. Выражения ссылки на метод
- 15.14. Постфиксные выражения
- 15.15. Унарные операторы
- 15.16. Выражения приведения типов
- 15.17. Множительные операторы
- 15.18. Сложение операторов
- 15.19. Операторы сдвига
- 15.20. Операторы сравнения
- 15.21. Операторы равенства
- 15.22. Побитовые и логические операторы
- 15.23. Оператор условного И
&& - 15.24. Оператор условного ИЛИ
|| - 15.25. Условный оператор
? : - 15.26. Операторы присваивания
- 15.27. Лямбда-выражения
- 16. Определённая присваиваемость
-
- 16.1. Определённая присваиваемость и выражения
-
- 16.1.1. Булевы константные выражения
- 16.1.2. Оператор логического И
&& - 16.1.3. Оператор логического ИЛИ
|| - 16.1.4. Оператор логического отрицания
! - 16.1.5. Условный оператор
? : - 16.1.6.
switchВыражения - 16.1.7. Другие выражения типа
boolean - 16.1.8. Выражения присваивания
- 16.1.9. Операторы
++и-- - 16.1.10. Другие выражения
- 16.2. Определённая присваиваемость и операторы
-
- 16.2.1. Пустые операторы
- 16.2.2. Блоки
- 16.2.3. Объявления локальных классов и интерфейсов
- 16.2.4. Операторы объявления локальных переменных
- 16.2.5. Операторы с метками
- 16.2.6. Операторы выражений
- 16.2.7.
ifОператоры - 16.2.8.
assertОператоры - 16.2.9.
switchОператоры - 16.2.10.
whileОператоры - 16.2.11.
doОператоры - 16.2.12.
forОператоры - 16.2.13.
break,yield,continue,returnиthrowоператоры - 16.2.14.
synchronizedОператоры - 16.2.15.
tryОператоры
- 16.3. Определённая присваиваемость и параметры
- 16.4. Определённая присваиваемость и инициализаторы массивов
- 16.5. Определённая присваиваемость и константы перечислений
- 16.6. Определённая присваиваемость и анонимные классы
- 16.7. Определённая присваиваемость и внутренние классы и интерфейсы
- 16.8. Определённая присваиваемость и статические инициализаторы
- 16.9. Определённая присваиваемость, конструкторы и инициализаторы экземпляров
- 17. Потоки и блокировки
-
- 17.1. Синхронизация
- 17.2. Наборы ожидания и уведомления
- 17.3. Sleep и Yield
- 17.4. Модель памяти
-
- 17.4.1. Общие переменные
- 17.4.2. Действия
- 17.4.3. Программы и порядок выполнения программы
- 17.4.4. Порядок синхронизации
- 17.4.5. Порядок happens-before
- 17.4.6. Выполнения
- 17.4.7. Корректные выполнения
- 17.4.8. Выполнения и требования к причинно-следственной связи
- 17.4.9. Наблюдаемое поведение и бесконечные выполнения
- 17.5.
finalСемантика полей - 17.6. Разрыв слова
- 17.7. Неатомарное обращение с
doubleиlong
- 18. Вывод типов
- 19. Синтаксис
- A. Ограниченное предоставление лицензии
Список примеров
- 3.10.5-1. Литералы строк
- 3.10.6-1. Текстовые блоки
- 3.10.6-2. Последовательности экранирования в текстовых блоках
- 3.10.6-3. Порядок преобразований содержимого текстового блока
- 3.10.6-4. Текстовые блоки вычисляются в
String - 4.2.2-1. Операции с целыми числами
- 4.2.4-1. Операции с числами с плавающей точкой
- 4.3.1-1. Создание объектов
- 4.3.1-2. Тождественность примитивных и ссылочных типов
- 4.4-1. Члены переменной типа
- 4.5.1-1. Неограниченные подстановочные знаки
- 4.5.1-2. Ограниченные подстановочные знаки
- 4.8-1. Примитивные типы
- 4.8-2. Примитивные типы и наследование
- 4.11-1. Использование типа
- 4.12.3-1. Различные виды переменных
- 4.12.4-1. Константы
- 4.12.5-1. Начальные значения переменных
- 4.12.6-1. Тип переменной против класса объекта
- 5.0-1. Преобразования во время компиляции и выполнения
- 5.0-2. Преобразования в различных контекстах
- 5.1.2-1. Расширяющие преобразования примитивных типов
- 5.1.3-1. Сужающие преобразования примитивных типов
- 5.1.3-2. Сужающие преобразования примитивных типов, приводящие к потере информации
- 5.2-1. Присваивание для примитивных типов
- 5.2-2. Присваивание для ссылочных типов
- 5.2-3. Присваивание для массивов
- 5.5-1. Приведение типов для ссылочных типов
- 5.5-2. Приведение типов для массивов
- 5.5-3. Несовместимые типы во время выполнения
- 5.6-1. Унарное числовое продвижение
- 5.6-2. Бинарное числовое продвижение
- 6.1-1. Уникальные имена пакетов
- 6.1-2. Уникальные имена модулей
- 6.1-3. Описательные имена классов
- 6.1-4. Условные имена переменных типа
- 6.3-1. Область видимости объявлений классов
- 6.3-2. Область видимости объявлений локальных переменных
- 6.4-1. Попытка затенения локальной переменной
- 6.4.1-1. Затенение поля объявлением локальной переменной
- 6.4.1-2. Затенение объявления типа другим объявлением типа
- 6.5.2-1. Переклассификация контекстуально неоднозначных имён
- 6.5.5.1-1. Ссылки на параметры типа
- 6.5.5.2-1. Квалифицированные имена типов
- 6.5.6.1-1. Простые имена выражений
- 6.5.6.1-2. Ссылки на переменные экземпляра
- 6.5.6.1-3. Ссылки на локальные переменные и формальные параметры
- 6.5.6.2-1. Квалифицированные имена выражений
- 6.5.6.2-2. Квалификация выражения именем типа
- 6.5.7.1-1. Простые имена методов
- 6.6-1. Управление доступом
- 6.6-2. Доступ к
publicполям, методам и конструкторам - 6.6-3. Доступ к
publicи не-publicклассам - 6.6-4. Доступ к полям, методам и конструкторам с пакетом доступа
- 6.6-5. Доступ к
privateполям, методам и конструкторам - 6.6.2-1. Доступ к
protectedполям, методам и конструкторам - 6.7-1. Полные квалифицированные имена
- 6.7-2. Полные квалифицированные имена против канонического имени
- 7.4.2-1. Пакет без имени
- 7.5.1-1. Импорт одного типа
- 7.5.1-2. Дублирование объявлений классов
- 7.5.1-3. Отсутствует импорт подпакета
- 7.5.1-4. Импорт имени типа, являющегося также именем пакета
- 7.5.2-1. Импорт типа по требованию
- 7.6-1. Конфликтующие объявления верхнего уровня классов и интерфейсов
- 7.6-2. Область видимости классов и интерфейсов верхнего уровня
- 7.6-3. Полные квалифицированные имена
- 7.1.1-1. Разрешение
requirestransitiveдиректив - 8.1.1.1-1. Объявление абстрактного класса
- 8.1.1.1-2. Объявление абстрактного класса, запрещающего подклассы
- 8.1.2-1. Взаимно рекурсивные границы переменных типа
- 8.1.2-2. Вложенные обобщенные классы
- 8.1.3-1. Вложенные классы и статические члены
- 8.1.3-2. Вложенные классы
- 8.1.4-1. Прямые надклассы и подклассы
- 8.1.4-2. Надклассы и подклассы
- 8.1.4-3. Класс зависит от самого себя
- 8.1.5-1. Незаконные надинтерфейсы
- 8.1.5-2. Надинтерфейсы
- 8.1.5-3. Незаконное множественное наследование интерфейса
- 8.1.5-4. Реализация методов надинтерфейса
- 8.2-1. Использование членов класса
- 8.2-2. Наследование членов класса с пакетом доступа
- 8.2-3. Наследование
publicиprotectedчленов класса - 8.2-4. Наследование
privateчленов класса - 8.2-5. Доступ к членам недоступных классов
- 8.3-1. Поля, унаследованные несколько раз
- 8.3-2. Повторное наследование полей
- 8.3.1.1-1.
staticполя - 8.3.1.1-2. Скрытие переменных класса
- 8.3.1.1-3. Скрытие переменных экземпляра
- 8.3.1.3-1. Сохранение
transientполей - 8.3.1.4-1.
volatileполя - 8.3.2-1. Инициализация полей
- 8.3.2-2. Вперёд ссылка на переменную класса
- 8.3.3-1. Ограничения на ссылки на поля
- 8.4.2-1. Подпись методов с эквивалентным переопределением
- 8.4.3.1-1. Переопределение абстрактного/абстрактного метода
- 8.4.3.1-2. Переопределение абстрактного/не абстрактного метода
- 8.4.3.6-1.
synchronizedмониторы - 8.4.3.6-2.
synchronizedметоды - 8.4.6-1. Переменные типа как типы исключений, выбрасываемые во время выполнения
- 8.4.8-1. Наследование
- 8.4.8.1-1. Переопределение
- 8.4.8.1-2. Переопределение
- 8.4.8.2-1. Вызов скрытых методов класса
- 8.4.8.3-1. Ковариантные возвращаемые типы
- 8.4.8.3-2. Предупреждение о неиспользуемых типах возвращаемого значения
- 8.4.8.3-3. Неверное переопределение из-за
throws - 8.4.8.3-4. Стирание влияет на переопределение
- 8.4.9-1. Перегрузка
- 8.4.9-2. Перегрузка, переопределение и скрытие
- 8.8-1. Объявления конструкторов
- 8.8.7-1. Тела конструкторов
- 8.8.7.1-1. Ограничения на явные вызовы конструкторов
- 8.8.7.1-2. Квалифицированный вызов конструктора предка
- 8.8.9-1. Конструкторы по умолчанию
- 8.8.9-2. Доступность конструкторов против классов
- 8.8.10-1. Препятствование созданию экземпляров посредством доступа к конструктору
- 8.9.2-1. Объявления тела перечисления
- 8.9.2-2. Ограничение на самоссылку константы перечисления
- 8.9.3-1. Итерация по константам перечисления с расширенным
forциклом - 8.9.3-2. Переключение на константы перечисления
- 8.9.3-3. Константы перечисления с телами классов
- 8.9.3-4. Несколько классов перечислений
- 9.3-1. Неоднозначные унаследованные поля
- 9.3-2. Поля, унаследованные несколько раз
- 9.3.1-1. Вперёд ссылка на поле
- 9.4.2-1. Перегрузка
abstractметода - 9.6.1-1. Объявление интерфейса аннотаций
- 9.6.1-2. Объявление интерфейса маркерных аннотаций
- 9.6.1-3. Объявления интерфейсов аннотаций с одним элементом
- 9.6.2-1. Объявление интерфейса аннотаций со значениями по умолчанию
- 9.6.3-1. Некорректный содержащий интерфейс аннотаций
- 9.6.3-2. Ограничение на повторение аннотаций
- 9.6.3-3. Повторяемый содержащий интерфейс аннотаций
- 9.7.1-1. Обычные аннотации
- 9.7.2-1. Маркерные аннотации
- 9.7.3-1. Аннотации с одним элементом
- 9.8-1. Функциональные интерфейсы
- 9.8-2. Функциональные интерфейсы и стирание
- 9.8-3. Обобщенные функциональные интерфейсы
- 9.9-1. Функциональные типы
- 9.9-2. Обобщенные функциональные типы
- 10.2-1. Объявление переменных массива
- 10.2-2. Переменные массива и типы массивов
- 10.4-1. Доступ к массивам
- 10.5-1.
ArrayStoreException - 10.6-1. Инициализаторы массивов
- 10.7-1. Массивы могут быть клонированы
- 10.7-2. Общие подмассивы после клонирования
- 10.8-1.
ClassОбъект массива - 10.8-2. Массивы
Classобъектов являются общими - 11.2.3-1. Перехват проверочных исключений
- 11.3-1. Выбрасывание и перехват исключений
- 12.4.1-1. Суперклассы инициализируются до подклассов
- 12.4.1-2. Инициализируется только класс, который объявляет
staticполе - 12.4.1-3. Инициализация интерфейса не инициализирует суперинтерфейсы
- 12.5-1. Вычисление создания экземпляра
- 12.5-2. Динамическая диспетчеризация во время создания экземпляра
- 13.4.4-1. Изменение суперкласса
- 13.4.4-2. Введение суперкласса
- 13.4.6-1. Изменение тела класса
- 13.4.6-2. Изменение суперкласса
- 13.4.7-1. Изменение доступности
- 13.4.8-1. Добавление объявления поля
- 13.4.9-1. Изменение переменной на
final - 13.4.16-1. Изменение метода на
abstract - 13.4.17-1. Изменение метода на
final - 13.4.23-1. Добавление перегруженного метода
- 13.5.4-1. Удаление члена интерфейса
- 13.5.7-1. Добавление метода по умолчанию
- 14.3-1. Объявления локальных классов
- 14.4-1. Локальные переменные, объявленные с
var - 14.4.1-1. Тип локальных переменных, объявленных с
var - 14.7-1. Метки и идентификаторы
- 14.11.3-1. Переход в операторе
switch - 14.13-1. Оператор
do - 14.14-1. Расширенный
forи массивы - 14.14-2. Расширенный
forи приведение к примитивному типу - 14.15-1. Оператор
break - 14.16-1. Оператор
continue - 14.19-1. Оператор
synchronized - 14.20.1-1. Перехват исключения
- 14.20.2-1. Обработка необработанного исключения с
finally - 14.21-1. Оператор
yield - 14.22-1. Условная компиляция
- 15.7.1-1. Операнд слева вычисляется первым
- 15.7.1-2. Неявный операнд слева в операторе составного присваивания
- 15.7.1-3. Прерывание вычисления левого операнда
- 15.7.2-1. Вычисление операндов перед операцией
- 15.7.4-1. Порядок вычисления при вызове метода
- 15.7.4-2. Прерывание выражения аргумента
- 15.8.3-1. Выражение
this - 15.9.4-1. Порядок вычисления и обнаружение недостатка памяти
- 15.10.2-1. Вычисление создания массива
- 15.10.2-2. Создание многомерного массива
- 15.10.2-3.
OutOfMemoryErrorи вычисление размерностей - 15.10.4-1. Ссылка на массив вычисляется первой
- 15.10.4-2. Прерывание вычисления ссылки на массив
- 15.10.4-3.
nullссылка на массив - 15.11.1-1. Статическая привязка для доступа к полю
- 15.11.1-2. Переменная получателя не имеет значения для доступа к полю
static - 15.11.2-1. Выражение
super - 15.12.2-1. Применимость метода
- 15.12.2-2. Тип возвращаемого значения не учитывается при выборе метода
- 15.12.2-3. Выбор наиболее конкретного метода
- 15.12.4.1-1. Ссылки на целевые объекты и методы
static - 15.12.4.1-2. Порядок вычисления при вызове метода
- 15.12.4.4-1. Переопределение и вызов метода
- 15.12.4.4-2. Вызов метода с использованием
super - 15.12.4.5-1. Подпись вызываемого метода имеет другую стирание, чем подпись метода во время компиляции
- 15.17.3-1. Целочисленный оператор остатка
- 15.17.3-2. Оператор остатка с плавающей запятой
- 15.18.1-1. Конкатенация строк
- 15.18.1-2. Конкатенация строк и условные операторы
- 15.20.2-1. Оператор сравнения типов
- 15.26.1-1. Простое присваивание компоненту массива
- 15.26.2-1. Составное присваивание компоненту массива
- 15.26.2-2. Значение левой части составного присваивания сохраняется перед вычислением правой части
- 15.29-1. Постоянные выражения
- 16-1. Определенное присваивание учитывает структуру операторов и выражений
- 16-2. Определенное присваивание не учитывает значения выражений
- 16-3. Определенное неприсваивание
- 17.4-1. Неправильно синхронизированные программы могут проявлять неожиданное поведение
- 17.4.5-1. Согласованность happens-before
- 17.4.8-1. Согласованность happens-before недостаточна
- 17.5-1.
finalПоля в модели памяти Java - 17.5-2.
finalПоля для безопасности - 17.5.3-1. Агрессивное оптимизация
finalполей - 17.6-1. Обнаружение разрыва слов
© Oracle and/or its affiliates. All rights reserved.
Licensed under the Oracle Technology Network License Agreement.