Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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

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

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

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

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

Таким чином, всі помилки в Java діляться на синхронні й асинхронні. З першими порівняно простіше працювати, тому що принципово можливо знайти точне місце в коді, що є причиною виникнення виняткової ситуації. Звичайно, Java є строгою мовою в тому розумінні, що всі вираження до крапки збою обов'язково будуть виконані, і в той же час жодне наступне вираження ніколи виконано не буде. Важливо пам'ятати, що помилки можуть виникати як через недостатню уважність програміста (відсутній потрібний клас, або індекс масиву вийшов за припустимі границі), так і по незалежним від нього причинам (відбувся розрив мережного з'єднання, збій апаратного забезпечення, наприклад, жорсткого диска й ін.).

Асинхронні помилки набагато складніше у виявленні й виправленні. Звичайному розроблювачеві дуже важко виявити причини збоїв у віртуальній машині. Це можуть бути помилки творців JVM, несумісність із операційною системою, апаратний збій і багато чого іншого. Все-таки сучасні віртуальні машини реалізовані досить добре й подібні збої відбуваються вкрай рідко (за умови використання якісних комплектуючих).

При виникненні виняткової ситуації керування передається від коду, що викликав виняткову ситуацію, на найближчий блок catch (або нагору по стеку) і створюється об'єкт, успадкований від класу Throwable, або його нащадків, що містить інформацію про виняткову ситуацію й використовується при її обробці.

Допускається створення власних класів виняткових ситуацій. Здійснюється це за допомогою механізму спадкування, тобто клас користувальницької виняткової ситуації повинен бути успадкований від класу Throwable, або його нащадків.

6 Обробка виняткових ситуацій. Конструкція try-catch

У загальному випадку конструкція виглядає так:

 

try { ...} catch(SomeExceptionClass e) { ...} catch(AnotherExceptionClass e) { ...}

 

Працює вона в такий спосіб. Спочатку виконується код, вкладений у фігурні дужки оператора try. Якщо під час його виконання не відбувається ніяких позаштатних ситуацій, то далі керування передається за закриваючу фігурну дужку останнього оператора catch, асоційованого з даним оператором try.

Якщо в межах try виникає виняткова ситуація, то далі виконання коду виробляється по одному з перерахованих нижче сценаріїв.

Виникла виняткова ситуація, клас якої зазначений як параметр одного із блоків catch. У цьому випадку виробляється виконання блоку коду, асоційованого з даним catch.. Далі, якщо код у цьому блоці завершується нормально, те й весь оператор try завершується нормально й керування передається на оператор (вираження), що йде за закриваючою фігурною дужкою останнього catch. Якщо код в catch завершується не штатно, то й весь try завершується нештатно по тій же причині.

Якщо виникла виняткова ситуація, клас якої не зазначений як аргумент у жодному catch, то виконання всього try завершується нештатно.

Конструкція try-catch-finally

Оператор finally призначений для того, щоб забезпечити гарантоване виконання якого-небудь фрагмента коду. В незалежності від того, чи виникла виняткова ситуація в блоці try, чи заданий підходящий блок catch, чи не виникла помилка в самому блоці catch, - блок finally буде все одно виконаний.

Послідовність виконання такої конструкції наступна: якщо оператор try виконаний нормально, те буде виконаний блок finally. У свою чергу, якщо оператор finally виконується нормально, те й весь оператор try виконується нормально.

Якщо під час виконання блоку try виникає виключення й існує оператор catch, що перехоплює даний тип виключення, відбувається виконання пов'язаного з catch блоку. Якщо блок catch виконується нормально, або ненормально, все одно потім виконується блок finally. Якщо блок finally завершується нормально, то оператор try завершується так само, як завершився блок catch.

Якщо обробка виняткової ситуації в коді не передбачена, то при її виникненні виконання методу буде припинене й виняткова ситуація буде передана для обробки коду більш високого рівня. Таким чином, якщо виняткова ситуація відбудеться у викликуваному методі, то керування буде передано іншому методу й обробку виняткової ситуації повинен зробити він. Якщо виняткова ситуація виникла в коді найвищого рівня (наприклад, методі main()), то керування буде передано виконуючій системі Java і виконання програми буде припинене (більш точно - буде зупинений потік виконання, у якому відбулася така помилка).


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

  1. XVII ст.). Виникнення козацтва.
  2. Аналіз опрацювання помилок
  3. Античний Рим: економічні причини розвитку і занепаду
  4. Банкрутство підприємства: причини, наслідки, процедура.
  5. Банкрутство підприємства: причини, оцінка ймовірності настання та наслідки
  6. Безпосередньо збутові ризики та причини їх виникнення
  7. Безробіття і зайнятість населення: причини, види та наслідки
  8. Безробіття, його суть та причини. Закон Оукена.
  9. Безробіття: суть, причини, форми та соціально-економічні наслідки
  10. Біохімічна гіпотеза виникнення життя.
  11. Біохімічні чинники виникнення втоми при виконанні короткочасних вправ максимальної і субмаксимальної потужності
  12. Бюджетний дефіцит як економічне явище та причини його виникнення




Переглядів: 1133

<== попередня сторінка | наступна сторінка ==>
StringBuffer | Використання оператора throw

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.018 сек.