Винятки – помилки в програмах

Скажімо, ви забули закрити фігурні дужки у своєму Java – коді Це призведе до помилки компіляції, яку можна легко виправити Але існують ще помилки часу виконання (run-­‐time  errors), Коли абсолютно несподівано, програма перестає працювати, як належить Наприклад, Java – клас зчитує файл з рахунком у грі Що станеться, якщо хто – то видалить цей файл Чи зупиниться програма з довгим і страшним повідомленням про помилку, або продовжить працювати, видавши дружелюбне повідомлення, типу:

Дорогий друг, з якоїсь причини, мені не вдалося

прочитати файл

scorestxt

Будь ласка,

перевір,

чи існує цей

файл

Створюйте програми, готові до незвичайних ситуацій У багатьох мовах програмування обробка помилок залежить тільки від доброї волі програміста Але Java змушує додавати код обробки помилок, інакше програма навіть не скомпіліруется

Помилки часу виконання в Java називаютьсявинятками (exceptions), А обробка таких помилок називається обробкою виключень (exception handling) Код, який може викликати виключення, розміщуйте в так званий блок try / catch Це наче сказати JVM наступне: Спробуй прочитати файл з рахунком гри, але якщо що – то піде не так, перехоплення помилку і запусти код, який з нею розбереться:

try{

fileScoresread()

} catch (IOException e){ Systemoutprintln(

“Дорогий друг, мені не вдалося прочитати файл

scorestxt&quot)

}

Ви навчитеся працювати з файлами в розділі 9, а зараз запамятайте новий термінI/O або ввід / вивід (input / output) Операції читання і запису (на диск або інший пристрій) називаються введенням / виведенням, звідси IOException – це клас, який містить інформацію про помилки введення / виводу

Метод генерує (throws) виключення у разі помилки Для різних типів помилок генеруються різні винятки Якщо в програмі є блок catch для даного конкретного типу помилки, то вона перехопить і програма перейде до виконання коду в блоці catch Програма продовжить роботу, і вважатиме, що про це виключення подбали

У коді, наведеному вище, висновок тексту відбудеться тільки в случаеошібкі читання файлуЧитання трасування стека

Якщо трапляється непередбачене виняток, який не обробляється програмою, на екран виводиться багаторядкове повідомлення про помилку Таке повідомлення називаєтьсятрассировкой стека (stack trace) Якщо ваша програма викликала кілька методів перед тим, як зіткнулася з проблемою, трасування стека допоможе відстежити проблему і знайти рядок коду, яка викликала ошібкуДавайте напишемо програму TestStackTrace, яка спеціально ділила б на нуль (номери рядків не є частиною коду) 1 class TestStackTrace{

2  TestStackTrace()

3  {

4  divideByZero()

5  }

6

7  int divideByZero()

8  {

9  return 25/0

10 }

11

12 static void main(String[]args)

13 {

14 new TestStackTrace()

15 }

16 }

Висновок цієї програми показує послідовність методів, викликаних до моменту виникнення помилки часу виконання Починайте читати цей висновок з останнього рядка, просуваючись вверхException in thread &quotmain&quot javalangArithmeticException: / by zero

at TestStackTracedivideByZero(TestStackTracejava:9)

at TestStackTrace&ltinit&gt(TestStackTracejava:4)

at TestStackTracemain(TestStackTracejava:14) Це означає, що виконання програми почалося з методу main (), потім перейшло до init () – конструктору, потім був викликаний метод divideByZero () Числа 14, 4 і 9 вказують, у яких рядках програми ці методи були викликані Після цього, було викликано виняток ArithmeticException, тому що в рядку 9 програма намагалася розділити на нуль Генеалогічне дерево винятків

Винятки в Java – це теж класи, і деякі з них представлені ось у такій ієрархії (стрілка вгору вказує на батька):

Нащадки класу Exception називаються некритичними винятками (checked exceptions), І ви повинні обробляти їх у своєму коді Тобто програма як – то буде продовжувати працювати після таких винятків, але отримані результати будуть не ті, що нам всім би хотелосьПотомкі класу Error – Це фатальні помилки JVM, з обробкою яких не може впоратися виконувана программаTooManyBikesException (занадто багато велосипедів) – етопрімер винятку, який може бути створено программістомКак програмісту дізнатися заздалегідь, що якийсь Java – метод якогось классаможет викликати виключення, і що необхідно використовувати блок

try / catch Не варто турбуватися Якщо ви викликаєте метод, який може призвести до виключення, компілятор Java видасть попередження про помилку, на зразок такого: ScoreReaderjava: unreported exception: javaioIOException must be caught or declared to be thrown at line 57

Додаткову інформацію про те, які виключення можуть бути викликані тими чи іншими методами, можна знайти в документації по Java У частині глави ви навчитеся поводитися

Джерело: Java Programming for Kids, Parents and Grandparents by Yakov Fain

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


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

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

Ваш отзыв

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

*

*