Обробка виняткових ситуацій

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ I НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ Національний університет "Львівська політехніка" Кафедра САПР / “ Обробка виняткових ситуацій” ЗВІТ до лабораторної роботи № 5 з курсу: “Об’єктно – орієнтоване програмування” ЛЬВІВ - 2013 р. МЕТА РОБОТИ Одержати навики роботи із оброблення виняткових ситуацій. ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ ВИНЯТКОВІ СИТУАЦІЇ У JAVA Виняткові ситуації (exceptions) можуть виникнути під час виконання (runtime) програми, перервавши її звичайний хід. До них відносится ділення на нуль, відсутність завантажуваного файла, індекс масива який став від’ємним або вийшов за верхню межу, переповнення виділеної пам’яті і багато інших неприємностей. Звичайно, можна передбачити такі ситуації і застрахуватися від них, наприклад таким чином: if (something == wrong){ // Робимо аварійні дії }else{ // Звичайний хід дій } Але при цьому багато часу іде на перевірки, і програма перетворюється у набір таких перевірок. Якщо переглянути промислову програму, написану мовою С або Pascal, то можна побачити, що вона на 2/3 складається із таких перевірок. В об’єктно-орієнтованих мовах програмування прийнято інший підхід. При виникненні виняткової ситуації виконуюча система створює об’єкт певного класу, який відповідає ситуації, що виникла і який містить дані про те, що, де і коли трапилося. Цей об’єкт передається на обробку програмі, в якій виникла виняткова ситуація. Якщо програма не обробляє виняткову ситуацію, тоді об’єкт за замовчуванням повідомляє обробнику виконуючої системи. Обробник поступає дуже просто: виводить на консоль повідомлення про виянткову ситуацію і зупиняє виконання програми. Блоки перехоплення виняткової ситуації Ми можемо перехопити і обробити виняткову ситуацію у програмі. При описуванні обробки застосовується бейсбольна термінологія. Говорять, що виконуюча система або програма "викидає" (throws) об’єкт-виключення. Цей об’єкт "пролітає" через всю програму, з’явившись спочатку у тому методі, де відбулася виняткова ситуація, а програма в одному або декількох місцях намагається (try) її "перехопити" (catch) і обробити. Оброблення можна зробити повністю в одному місці, а можна обробити виняткову ситуацію в одному місці, викинути знову, перехопити у другому місці і обробляти далі. Добре написані об’єктно-орієнтовані програми обовязково повинні обробляти всі виникаючі в них виняткові ситуації. Для того щоб спробувати (try) перехопити (catch) об’єкт-виняток, потрібно весь код програми, у якому може виникнути виняткова ситуація, охопити оператором try {} catch() {}. Кожний блок catch(){} перехоплює виняткову ситуацію тільки одного типу, вказаного в його аргументі. Але можна написати декілька блоків catch(){} для перехоплення декількох типів виняткових ситуацій. Частина заголовка методу throws Та обставина, що метод не обробляє виникаючих виняткових ситуацій, а викидає (throws), потрібно відмічати у заголовку методу службовим словом throws і вказанням класу виключення: private static void f(int n) throws ArithmeticException{ System.out.println(" 10 / n = " + (10 / n)) ; } При перевірці компілятор помічає необроблені в методах і конструкторах виняткові ситуації і вважає за помилку відсутність у заголовку таких методів і конструкторів з поміткою throws. Уважно прослідкуйте за передачею управління і зауважте, що виняткові ситуації класу ArithmeticException уже не викидаються в метод main(). Оператор try {} catch() {} у методі f() можна розглядати як вкладений оператор обробки виняткових ситуацій у методі main(). При необхідності виняткову ситуацію можна викинути оператором throw(). Оператор throw Цей оператор дуже простий: післе слова throw через пробіл записується об’єкт класу-виняткової ситуації. Досить часто він створюється прямо в операторі throw, наприклад: throw new ArithmeticException(); Оператор можна записати у будь-якому місці програми. Він негайо викидає записаний в ньому об’єкт-виняткову ситуацію і далі обробка цієї виняткової ситуації іде як звичайно, так ніби у цьому місці відбулося ділення на нуль або інша дія, що викликала виняткову ситуацію класу ArithmeticException. Отже, кожний блок catch() перехоплює один певний тип виняткових ситуацій. Якщо потрібно обробити декілька типів винятквих ситуацій, то можна скористатися тим, що класи-виняткові ситуації утворюють ієрархію. Порядок оброблення виняткових ситуацій Блоки catch () {} перехоплюють виняткові ситуації в порядку написання цих блоків. Це правило приводить до цікавих результатів. У лістингу 2.2 було записано два блоки перехоплення catch() і обидва блоки виконувались при виникненні відповідної виняткові ситуації. Це відбувалося тому, що класи-виняткові ситуації ArithmeticException і ArrayindexOutofBoundsException знаходяться на різних гілках ієрархії виняткових ситуацій. Інший результат буде, якщо блоки catch() {} перехоплюють виняткові ситуації, розташовані на одній гілці. Лістинг програми: import java.io.IOException; public class Винятки{ public static void main(String args[]){ String str = "2346512aa"; int sum = 0; for(int i = 0; i < str.length(); i++){ try{ sum += Integer.parseInt(str.charAt(i)+""); }catch(NumberFormatException nfe){ System.out.print("Функція catch! "); }finally{ System.out.println("Функція finally i= " + i); } } System.out.println("Sum: " + sum); } } Результати виконання програми: Функція finally i= 0 Функція finally i= 1 Функція finally i= 2 Функція finally i= 3 Функція finally i= 4 Функція finally i= 5 Функція finally i= 6 Функція catch! Функція finally i= 7 Функція catch! Функція finally i= 8 Sum: 23 Висновок На даній лабораторній роботі я одержала навики роботи із оброблення виняткових ситуацій.
Антиботан аватар за замовчуванням

03.05.2014 20:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!