Page 228 - 6253
P. 228
}
public static void main(String[] args) {
File f = new File("demo.txt");
// File f = null;
try {
connectFile(f);
} catch(IllegalArgumentException e) {
System.err.print("Обробка unchecked-винятку поза межами методу: " + e);
}
}
}
Метод connectFile(), що викликається, може (за відсутності файлу на диску
або при аргументі null) генерувати виняток, що перехоплюється обробником. В
результаті цього об'єкт винятку IllegalArgumentException, який не підлягає
обов’язковій перевірці, що є підкласом класу RuntimeException, передається
обробникові винятків в методі main().
У випадку виникнення виняткової ситуації, компілятор вимагає обробки
винятку в методі або відмови від неї за допомогою інструкції throws.
Якщо метод генерує виняток за допомогою оператора throw і при цьому блок
catch в методі відсутній, то для делегування процедури обробки винятку іншому
методу, тип класу винятків, що підлягає перевірці (checked), має бути вказаний в
операторі throws при оголошенні методу. Для винятків, що є підкласами класу
RuntimeException (unchecked) і використовуються для відображення програмних
помилок під час виконання додатку, оператор throws в оголошенні методу повинен
бути відсутнім.
9.3 Ключове слово finally
Можлива ситуація, при якій необхідно виконати деякі дії із завершення
програми (закрити потік, звільнити з'єднання з базою даних) незалежно від того, був
згенерований виняток чи ні. Для цього використовується блок finally, який
обов’язково виконується після інструкцій try або catch, наприклад:
227