конструкція try

* - для виведення помилок можна використовувати окремий потік (System.err).

Java вимагає обробляти майже всі винятки (Exception), під це правило не потрапляють виключення, успадковані від RuntimeException (помилка виконання). В інших же випадках від вас буде потрібно вибір: обробити помилку на місці. або відправити помилку на рівень вище (для цього використовується throw new Exception ()).

* -не обов'язкові для перехоплення

Чому погано перехоплювати відразу через Exception, минаючи myException

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

Пару слів про finally

Блок finally влаштований таким чином, що він буде виконуватися в будь-якому випадку. Прошу звернути увагу на ці слова, в них заховано найцікавіше:

Що поверне функція getNumber ()?

Кращий спосіб обробки винятків

Якщо виняток може бути коректно оброблено, то його потрібно ловити, інакше, воно повинно бути проброшено далі (тобто писати відразу catch (Exception e) не варто).

Як обробляти різні виключення по-різному?

Досить розмістити кілька catch поспіль, при цьому важливо не порушити ієрархію, інакше виняток може бути оброблено раніше, ніж вам це потрібно (в іншому блоці catch).

Чи обов'язково "перевіряти" все виключення?

Ні, існують "непроверяемие" виключення, які не потрібно обробляти, наприклад: NullPointerException (нульовий покажчик) не вимагає примусового створення блоку try / catch. На діаграмі, наведеній вище, "непроверяемие" виключення позначені зеленим кольором.

Чи може в конструкторі "викликати" виключення?

Звичайно можна, конструктор такий же метод як і всі інші.

Схожі статті