Runtime-винятки в Java

Компютер не буває емоційним Він може дати точний математичний опис, але забуде про інтонації

Френк Заппа

Runtime-система Java збуджує виключення двох основних видів: runtime-винятки, що розширюють клас RuntimeException, І помилки, які розширюють клас Error Винятки обох видів є непроверяемимі (див розділ 73) Верхня частина ієрархії виключень виглядає наступним чином:

Винятки 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

Метод отримав невірний аргумент (наприклад, метод Stringequals викликаний для обєкта, який не відноситься до типу 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

Невірне вміст рядка, в якій повинно було знаходитися число

Виняток збуджується такими методами, як IntegerparseInt

SecurityException  extends RuntimeException

Спроба виконання дії, забороненого системою безпеки –

зазвичай обєктом SecurityManager для поточного runtime-контексту

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*