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

Когда программа нарушает семантические ограничения языка программирования Java, виртуальная машина Java сообщает об этой ошибке программе как об исключении.

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

Вместо этого язык программирования Java указывает, что при нарушении семантических ограничений будет выдано исключение и вызовет нелокальную передачу управления из точки, где произошло исключение, в точку, которая может быть указана программистом.

Считается, что исключение было выброшено из точки, где оно произошло, и считается, что оно было обнаружено в точке, в которую передается управление.

Программы также могут явно генерировать исключения, используя операторы throw.

Явное использование операторов throw предоставляет альтернативу старомодному стилю обработки условий ошибки, возвращая значения, такие как целочисленное значение -1, где отрицательное значение обычно не ожидается. Опыт показывает, что слишком часто такие значения игнорируются или не проверяются вызывающими абонентами, что приводит к тому, что программы не являются надежными, демонстрируют нежелательное поведение или и то, и другое.

Каждое исключение представлено экземпляром класса Throwable или одним из его подклассов. Такой объект можно использовать для передачи информации от точки, в которой возникает исключение, к обработчику, который его перехватывает. Обработчики устанавливаются предложениями catch в операторах try.

В процессе генерации исключения виртуальная машина Java внезапно завершает одно за другим все выражения, инструкции, вызовы методов и конструкторов, инициализаторы и выражения инициализации полей, которые начали, но не завершили выполнение в текущем потоке. Этот процесс продолжается до тех пор, пока не будет найден обработчик, который указывает, что он обрабатывает это конкретное исключение, путем присвоения имени классу исключения или суперклассу класса исключения. Если такой обработчик не найден, то исключение может быть обработано одним из иерархии обработчиков неперехваченных исключений - таким образом, прилагаются все усилия, чтобы избежать того, чтобы исключение осталось необработанным.

Механизм исключений платформы Java SE интегрирован с ее моделью синхронизации, так что мониторы разблокируются как синхронизированные операторы, а вызовы синхронизированных методов завершаются внезапно.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки