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
   223   224   225   226   227   228   229   230   231   232   233