Сообщения

Показаны сообщения с ярлыком "исключения в Java"

Спецификация Java 11: 11.3. Обработка исключения во время выполнения

Изображение
Когда генерируется исключение, управление передается от кода, вызвавшего исключение, ближайшему динамически включающему предложению catch, если таковое имеется, оператора try, который может обработать исключение. Оператор или выражение динамически включается в предложение catch, если оно появляется в блоке try оператора try, частью которого является предложение catch, или если вызывающий оператор или выражение динамически заключен в предложение catch. Вызывающий оператор или выражение зависит от того, где он встречается: Если внутри метода, то вызывающая сторона - это выражение вызова метода, которое было выполнено, чтобы вызвать вызов метода. Если внутри конструктора, или инициализатора экземпляра, или инициализатора для переменной экземпляра, то вызывающей стороной является выражение создания экземпляра класса или вызов метода newInstance, который был выполнен, чтобы вызвать создание объекта. Если внутри статического инициализатора или инициализатора для статической переменной,...

Спецификация Java 11: 11.2.3. Проверка исключений

Изображение
Это ошибка времени компиляции, если тело метода или конструктора может вызвать некоторый класс исключения E, когда E является проверенным классом исключения, а E не является подклассом некоторого класса, объявленного в предложении throws метода или конструктора. Это ошибка времени компиляции, если тело лямбда может вызвать некоторый класс исключения E, когда E является проверенным классом исключения, а E не является подклассом некоторого класса, объявленного в предложении throws типа функции, на который нацелено лямбда-выражение. Это ошибка времени компиляции, если инициализатор переменной класса или статический инициализатор именованного класса или интерфейса может вызвать проверенный класс исключения. Это ошибка времени компиляции, если инициализатор переменной экземпляра или инициализатор экземпляра именованного класса может генерировать проверенный класс исключения, если только именованный класс не имеет хотя бы одного явно объявленного конструктора и класса исключения или один ...

Спецификация Java 11: 11.2.2. Анализ утверждений исключений

Изображение
Оператор throw, выброшенное выражение которого имеет статический тип E и не является окончательным (final) или фактически конечным (effectively final) параметром исключения, может вызывать E или любой класс исключения, который может вызвать выброшенное выражение. Например, оператор throw new java.io.FileNotFoundException(); может генерировать только java.io.FileNotFoundException. Формально это не тот случай, когда он "может генерировать" подкласс или суперкласс java.io.FileNotFoundException. Оператор throw, выброшенное выражение которого является конечным или фактически конечным параметром исключения в предложении catch C, может вызывать класс исключения E, если и только если: E - это класс исключения, который может выбросить блок try оператора try, который объявляет C; и E - это присваивание, совместимое с любым из перехватываемых классов исключений C; и E не совместим по присваиванию ни с одним из ловимых классов исключений в предложениях catch, объявленных слева от C...

Спецификация Java 11: 11.2.1. Анализ исключений в выражениях

Изображение
Выражение создания экземпляра класса может вызвать исключение класса E, если: Выражение является квалифицированным выражением создания экземпляра класса, а квалифицирующее выражение может вызывать E; или же Некоторое выражение списка аргументов может вызывать E; или же E - один из типов исключений для типа вызова выбранного конструктора; или же Выражение создания экземпляра класса включает ClassBody, а некоторый инициализатор экземпляра или инициализатор переменной экземпляра в ClassBody может выдавать E. Выражение вызова метода может вызвать исключение класса E, если: Выражение вызова метода имеет форму Primary . [TypeArguments] Identifier и Primary выражение могут вызывать E; или же Некоторое выражение списка аргументов может вызывать E; или же E - это один из типов исключений для типа вызова выбранного метода. Лямбда-выражение не может генерировать классы исключений. Для любого другого вида выражения выражение может вызывать исключение класса E, если одно из его непос...

Спецификация Java 11: 11.2. Проверка исключений во время компиляции

Изображение
Язык программирования Java требует, чтобы программа содержала обработчики проверенных исключений, которые могут возникнуть в результате выполнения метода или конструктора. Эта проверка во время компиляции на наличие обработчиков исключений предназначена для уменьшения количества исключений, которые не обрабатываются должным образом. Для каждого проверенного исключения, которое является возможным результатом, предложение throws для метода или конструктора должно упоминать класс этого исключения или один из суперклассов класса этого исключения. Проверенные классы исключений, указанные в предложении throws, являются частью контракта между разработчиком и пользователем метода или конструктора. Предложение throws переопределяющего метода может не указывать, что этот метод приведет к сбору любого проверенного исключения, которое переопределенному методу не разрешено с помощью его предложения throws. Когда задействованы интерфейсы, более одного объявления метода может быть переопределено одн...

Спецификация Java 11: 11.1.3. Асинхронные исключения

Изображение
Большинство исключений возникают синхронно в результате действия потока, в котором они возникают, и в той точке программы, которая указана для возможного возникновения такого исключения. Асинхронное исключение, напротив, является исключением, которое потенциально может произойти в любой момент выполнения программы. Асинхронные исключения возникают только в результате: Вызов (устаревшего) метода stop класса Thread или ThreadGroup. Методы stop (устаревшие) могут быть вызваны одним потоком для воздействия на другой поток или все потоки в указанной группе потоков. Они асинхронны, потому что могут возникать в любой момент выполнения другого потока или потоков. Внутренняя ошибка или ограничение ресурсов в виртуальной машине Java, которые не позволяют ей реализовать семантику языка программирования Java. В этом случае вызываемое асинхронное исключение является экземпляром подкласса VirtualMachineError. Обратите внимание, что StackOverflowError, подкласс VirtualMachineError, может быть в...

Спецификация Java 11: 11.1.2. Причины исключений

Изображение
Исключение создается по одной из трех причин: Оператор throw был выполнен. Виртуальная машина Java синхронно обнаружила ненормальное условие выполнения, а именно: оценка выражения нарушает нормальную семантику языка программирования Java, такую как целое деление на ноль. ошибка возникает при загрузке, связывании или инициализации части программы; в этом случае создается экземпляр подкласса LinkageError. внутренняя ошибка или ограничение ресурсов не позволяет виртуальной машине Java реализовать семантику языка программирования Java; в этом случае создается экземпляр подкласса VirtualMachineError. Эти исключения генерируются не в произвольной точке программы, а скорее в той точке, где они указаны как возможный результат оценки выражения или выполнения оператора. Произошло асинхронное исключение. Читайте также: Спецификация Java 11: Глава 11. Исключения Спецификация Java 11: 11.1. Виды и причины исключений Спецификация Java: пункт 12.7. Выгрузка классов и интерфейсов. 12...

Спецификация Java 11: 11.1. Виды и причины исключений

Изображение
11.1.1. Виды исключений Исключение представляет экземпляр класса Throwable (прямой подкласс Object) или один из его подклассов. Throwable и все его подклассы вместе составляют классы исключений. Классы Exception и Error являются прямыми подклассами Throwable: Exception - это суперкласс всех исключений, из которых обычные программы могут захотеть восстановиться. Класс RuntimeException является прямым подклассом Exception. RuntimeException - это суперкласс всех исключений, которые могут быть вызваны по многим причинам во время оценки выражения, но восстановление из которых все еще возможно. RuntimeException и все его подклассы в совокупности являются классами исключений времени выполнения. Error - это суперкласс всех исключений, от которых обычно не ожидается восстановление обычных программ. Error и все ее подклассы вместе составляют классы ошибок. Непроверенные (unchecked) классы исключений - это классы исключений времени выполнения и классы ошибок. Проверенные (checked)...

Спецификация Java 11: Глава 11. Исключения

Изображение
Когда программа нарушает семантические ограничения языка программирования Java, виртуальная машина Java сообщает об этой ошибке программе как об исключении. Примером такого нарушения является попытка индексации за пределами массива. Некоторые языки программирования и их реализации реагируют на такие ошибки, безоговорочно завершая программу; другие языки программирования позволяют реализации реагировать произвольным или непредсказуемым образом. Ни один из этих подходов несовместим с целями проектирования платформы Java SE: обеспечить переносимость и надежность. Вместо этого язык программирования Java указывает, что при нарушении семантических ограничений будет выдано исключение и вызовет нелокальную передачу управления из точки, где произошло исключение, в точку, которая может быть указана программистом. Считается, что исключение было выброшено из точки, где оно произошло, и считается, что оно было обнаружено в точке, в которую передается управление. Программы также могут явно генер...