Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпори JAVA.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
178.34 Кб
Скачать

48. Помилки при роботі програми. Виняткові ситуації

При виконанні програми найчастіше можуть виникати помилки. В одних випадках це викликано

помилками програміста , в інших зовнішніми причинами. Наприклад , може виникнути

помилка введення / виводу при роботі з файлом або мережевим з'єднанням. У класичних

мовах програмування , наприклад в С , було потрібно перевіряти якесь умова яке

вказувало на наявність помилки і, залежно від цього робити певні

дії .

наприклад

...

int statusCode = someAction ();

if ( statusCode ) {

 ... Обробка помилки

} else {

Стор. 23 з 51

Програмування на Java

Rendered by www.RenderX.com statusCode = anotherAction ();

 if ( statusCode ) {

  ... Обробка помилки ...

}

}

...

У Java з'явилося більш просте і елегантне рішення - обробка виняткових

ситуацій .

 

try {

 someAction ();

 anotherAction ( )

} catch ( Exception e ) {

 ... Обробка виняткової ситуації

}

Легко помітити , що такий підхід є не тільки елегантним , але і більш надійним

і простим для розуміння.

49.Причини виникнення помилок

Існує три причини виникнення виняткових ситуацій .

• Спроба виконати некоректне вираженіе.Напрімер , розподіл на нуль , або звернення до об'єкта за посиланням , рівний null , спроба використовувати клас , опис якого ( class -файл) відсутня, і т.д.В таких випадках завжди можна точно вказати, в якому місці сталася помилка - саме в некоректному вираженні.

• Виконання оператора throw.Очевідно , що і тут можна легко вказати місце виникнення виняткової ситуації .

• Асинхронні помилки під час виконання программи.Прічіной таких помилок можуть бути збої всередині самої віртуальної машини (адже онатакже є програмою ) , або виклик методу stop ( ) біля потоку виконання thread ) . У цьому випадку неможливо вказати точне місце програми , де відбувається виняткова ситуація . Якщо ми намагаємося зупинити потік виконання ( викликавши метод stop ( )) , то ми не можемо передбачити , при виконанні якого саме вираження цей потік зупиниться.

Таким чином , всі помилки в Java діляться на синхронні і асинхронні . Перші порівняно простіше , так як принципово можливо знайти точне місце в коді , яке є причиною виникнення виключно ситуації. Звичайно , Java є строгим мовою в тому сенсі , що всі вирази до точки збою обов'язково будуть виконані , в той же час жодне подальше вираження ніколи виконана не буде . Важливо пам'ятати , що помилки можуть виникати як з причини недостатньої уважності програміста (відсутній потрібний клас , або індекс масиву вийшов за допустимі межі ) , так і понезавісящім від нього причин ( стався розрив мережевого з'єднання, збій апаратного забезпечення , наприклад , жорсткого диска , і др . ) . Асинхронні помилки набагато складніше у виявленні і виправленні . Звичайному розробнику дуже скрутно виявити причини збоїв у віртуальній машині. Це можуть бути помилка творців JVM , несумісність з операційною системою , апаратний збій і багато іншого. Все ж сучасні віртуальні машини реалізовані досить добре, і подібні збої відбуваються вкрай рідко (за умови використання якісних комплектуючих ) . Аналогічна ситуація спостерігається і у випадку з примусовою зупинкою потоків виконання. Оскільки ця дія виконується операційною системою , ніколи не можна передбачити, в якому саме місці зупиниться потік . Це означає , що програма може багаторазово відпрацювати коректно , а потім несподівано дати збій просто через те , що потік зупинився в якомусь іншому місці. З цієї причини примусова зупинка вкрай не рекомендується. У відповідній лекції наводяться приклади коректного управління життєвим циклом потоку . При виникненні виняткової ситуації управління передається від коду , що викликав виняткову ситуацію , на найближчий блок catch (або вгору по стеку ) , і створюється об'єкт , успадкований від класу Throwable або його нащадків ( див. діаграму ієрархії класів винятків ) , який містить інформацію про виняткову ситуації і використовується при її обробці . Власне в блоці catch вказується саме клас оброблюваної ситуації. Детально обробка помилок розглядається нижче. Ієрархія за якою передається інформація про виняткову ситуації залежить від того , де ця виняткова ситуація виникла. Якщо це • метод , то управління буде передаватися в те місце , де цей метод був викликаний ; • конструктор , то управління буде передаватися туди , де спробували створити об'єкт (як правило , застосовуючи оператор new ) ; • якщо це статичний ініціалізатор , то управління буде передано туди , де сталося перше звернення класу , що привело його ініціалізацію.Допускается створення власних класів виняткових ситуацій . Здійснюється це за допомогою механізму успадкування, тобто клас користувальницької виняткової ситуації , повинен бути успадкований від клас Throwable або його нащадків.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]