Винятки в Java

Винятки в Java

  • 22 квітня, 2022
  • читати 5 хв
Євген Мица
Євген Мица Android Developer у emcodio, Викладач Комп'ютерної школи Hillel.

Виняток (виняткова ситуація) — проблема, що виникає під час виконання програми.

Виняток — подія, що відбувається під час виконання програми, яка порушує нормальний потік інструкцій.

Євген Мица, Android Developer у emCodio та Викладач курсів по Java, розповідає, що таке винятки і що з ними робити.

Деякі причини:

  • Користувач ввів неправильні дані

  • Не вдається знайти файл, який потрібно відкрити

  • Мережеве з'єднання було втрачено під час сеансу зв'язку

  • JVM не вистачає пам'яті

Рекомендуємо публікацію по темі

Типи винятків:

  • Винятки, які перевіряються (Checked Exception)

  • Винятки, які не перевіряються (Unchecked Exception)

  • Помилки (Errors)

Винятки, які перевіряються

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

Наприклад, використовуємо клас FileReader для читання даних із файлу. Файла, зазначеного у його конструкторі, немає. Виникає виняток FileNotFoundException. Компілятор пропонує обробити виняток.

Винятки, які не перевіряються

Винятки, які не перевіряються, виникають під час виконання програми. Також називаються винятками часу виконання (Runtime Exceptions). До них належать помилки програмування, такі як логічні помилки або неправильне використання API. Винятки часу виконання ігноруються під час компіляції.

Наприклад, оголошено масив розміром із 7-ми елементів. Намагаємось викликати 8-й елемент масиву. Виникає виняток ArrayIndexOutOfBoundsException.

Помилки — це не винятки, а проблеми, які виникають поза контролем користувача або програміста. Помилки зазвичай ігноруються в коді, тому що рідко що-небудь можна зробити з помилкою. Ігноруються під час компіляції.

Наприклад, такі як OutOfMemoryError, VirtualMachineError, IOError.

Класи помилок та винятків

Клас Throwable — суперклас всіх помилок та винятків у Java.

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

Екземпляри двох підкласів класу Throwable, Error і Exception зазвичай використовуються для позначення виникнення виняткових ситуацій.

Exception — більшість винятків, які генерують об'єкти у коді програми.

Error зазвичай використовується для серйозних помилок у системі, наприклад, що перешкоджають запуску JVM.

RuntimeException — суперклас тих винятків, які можуть бути під час нормальної роботи віртуальної машини Java. RuntimeException та його підкласи — винятки, які не перевіряються.

RuntimeException зарезервований для винятків, що вказують на неправильне використання API.

Прикладом винятку часу виконання є виняток NullPointerException, який виникає, коли метод намагається отримати доступ до члена об'єкта через посилання null.

Обробка винятків

Обробка винятків — процес визначення послідовності кроків у програмі для обробки винятка.

Надаючи обробники винятків у програмі, ми можемо забезпечити нормальне виконання програми.

Без обробників винятків програма буде завершена, і нормальний потік виконання буде перерваний у разі винятку.

Варіанти обробки винятків:

  • Перехоплення та обробка винятків

  • Зазначення винятків, які створються методом

Для перехоплення та обробки використовуються блоки try, catch та finally. Ключове слово try використовується для вказівки блоку, в якому маємо розмістити код винятку. Не можемо використовувати лише блок try. За блоком try повинен слідувати або catch, або finally.

Блок catch використовується для обробки винятків.

Блок finally використовується для виконання необхідного програмного коду. Виконується незалежно від того, чи опрацьовано виняток.

При зазначені винятків, які створюються методом, метод повинен надати умову throws, в якій перераховані винятки.

Ключове слово throws використовується для оголошення винятків. Вказує, що у методі може виникнути виняток. Не викликає виняток. Завжди використовується із сигнатурою методу.

Рекомендуємо курс по темі