Главная » Java » Runtime-исключения в Java

0

Компьютер не бывает эмоциональным. Он может дать точное математическое описание, но забудет об интонации.

Фрэнк Заппа

Runtime-система  Java возбуждает исключения двух основных видов: runtime-исключения, расширяющие класс RuntimeException,  и ошибки, которые расширяют класс Error. Исключения обоих видов являются непроверяемыми  (см. раздел 7.3). Верхняя часть иерархии исключений выглядит следующим образом:

Исключения Error сигнализируют об очень серьезных проблемах, после которых программа обычно завершается, и которые никогда (или почти никогда) не должны перехватываться. Исключения Error не являются расширениями RuntimeException,  так что программист, пытающийся написать универсальное условие catch для перехвата всех исключений Exception и RuntimeException  (обычно делать этого не следует) не сможет перехватить исключения Error. Разумеется, после возникновения любого исключения будут выполнены условия finally операторов try, так как все исключения, в том числе и Error, просматривают стек вызовов. Следовательно, вы всегда сможете выполнить необходимые завершающие действия.

Программист может самостоятельно расширить классы RuntimeException и Error, чтобы создать свои собственные варианты непроверяемых исключений — то есть таких исключений, которые можно возбуждать без указания их в условии throws. Мы сообщаем об этом по единственной причине — чтобы вы знали, что этого делать не следует.

Условие throws предусмотрено именно для того, чтобы при вызове метода были видны все возможные аспекты его поведения. Порождая свое исключение от RuntimeException или Error, вы сообщаете о нем ложные сведения (будто оно запускается runtime-системой). Кроме того, другие разработчики, читающие вашу программу, полагают, что условие throws дает им информацию о возможном поведении вашего метода; вы нарушаете это предположение.

Даже если вы пишете программу для своего собственного использования, не стоит создавать непроверяемые исключения: программисты, не полностью понимающие работу вашего кода, могут упустить нечто важное. Кроме того, вероятно, что через несколько месяцев после написания программы именно вы окажетесь тем человеком, который будет изменять ее без полного понимания происходящего. Одно из правил создания понятных программ — считать классы RuntimeException и Error нерасширяемыми.

Все классы Error и RuntimeException содержат по меньшей мере два конструктора: один вызывается без аргументов, а второй получает объект String с описанием. Исключения, которые прямо или косвенно расширяют RuntimeException  или Error, не объявляются в условии throws, поскольку они могут произойти в любой момент, что делает их объявление излишним.

Исключение CloneNotSupportedException непосредственно порождается от класса Exception, поскольку каждая программа, которая вызывает метод clone, возбуждающий данное исключение, должна явным образом его обработать. Оно рассмотрено в разделе “Дублирование объектов.

Настоящая глава делится на две части — одна посвящена классам RuntimeException,  а другая — классам Error. Для каждого исключения приводится его значение, описание ситуации, в которой оно возбуждается, а также все дополнительные конструкторы.

Б.1 Классы RuntimeException

ArithmeticException  extends RuntimeException

Возникла исключительная  ситуация во время вычислений (например,

деление целого числа на ноль).

ArrayStoreException extends RuntimeException

Попытка сохранения в массиве объекта неверного типа.

ClassCastException extends RuntimeException

Попытка недопустимого приведения типа.

IllegalArgumentException extends RuntimeException

Метод получил неверный аргумент (например, метод String.equals вызван для объекта, который не относится к типу String).

IllegalMonitorStateException extends RuntimeException

Механизм wait/notify использован за пределами синхронного кода.

IllegalThreadStateException extends IllegalArgumentException

Состояние потока не допускает выполнения требуемой операции.

IndexOutOfBoundsException extends RuntimeException

Runtime-система  генерирует это исключение при выходе индекса массива или объекта String за пределы диапазона допустимых значений.

NegativeArraySizeException extends RuntimeException

Попытка создания массива отрицательного размера.

NullPointerException extends RuntimeException

Для доступа к полю или методу использована null-ссылка. Это же исключение сигнализирует о передаче методу параметра null, если для данного параметра это значение является недопустимым. Используется аналогично IllegalArgumentException.

NumberFormatException extends IllegalArgumentException

Неверное содержимое строки, в которой должно было находиться число.

Исключение возбуждается такими методами, как Integer.parseInt.

SecurityException  extends RuntimeException

Попытка выполнения действия, запрещенного системой безопасности —

обычно объектом SecurityManager для текущего runtime-контекста.

Источник: Арнольд К., Гослинг Д. – Язык программирования Java (1997)

По теме:

  • Комментарии