Java програмування мовою Exception (виключення) стосується несподіваних подій або помилок, які виникають під час виконання програми. У Java виключення відіграють важливу роль у керуванні помилками під час розробки, забезпечуючи безперервну роботу програми навіть за наявності проблем.
У цій статті я покажу, що таке виключення, як вони працюють і як правильно з ними працювати.
1. Що таке Exception?
Exception — це подія, яка порушує нормальний потік виконання програми. Такі події можуть виникати через помилки, невірні дані, неправильний ввід або інші екстрені ситуації. У Java виключення успадковують клас Throwable
і зазвичай поділяються на два типи:
- Checked Exceptions: Це помилки, які відомі ще на етапі компіляції і компілятор вимагає, щоб вони були належним чином оброблені. Прикладом є такі класи, як
IOException
,SQLException
. - Unchecked Exceptions: Це помилки часу виконання, які не обов’язково перевіряються компілятором. Прикладом є помилки типу
NullPointerException
,ArrayIndexOutOfBoundsException
.
2. Обробка виключень
У Java для обробки виключень використовуються блоки try-catch. Блок try містить код, який може спричинити помилку, а блок catch — код для обробки цієї помилки.
try {
// Тут пишемо код, що може викликати помилку
} catch (ExceptionType e) {
// Тут обробляємо помилку
}
3. Спеціальні виключення
Окрім стандартних виключень, Java дозволяє створювати свої власні класи виключень, успадковуючи від уже існуючих класів виключень.
public class SpecialException extends Exception {
public SpecialException (String message) { super(message); }
}
У цьому прикладі ми викликаємо конструктор класу Exception.
4. Ієрархія виключень
У Java клас Throwable
розділяється на два основні класи:
- Error: Цей клас представляє серйозні помилки, що повинні призвести до припинення виконання програми (наприклад,
OutOfMemoryError
). - Exception: Цей клас представляє помилки, що виникають всередині програми.
Клас Exception
також поділяється на два основних типи, як згадувалося вище:
- Checked Exception: Помилки, що виникають під час компіляції. Такі помилки повинні бути оброблені.
- Unchecked Exception: Помилки, що виникають під час виконання програми, і обробка яких не є обов’язковою.
5. Ключові слова throw та throws
- throw: Це ключове слово дозволяє вручну викидати виключення.
- Приклад:
if (age < 18) {
throw new IllegalArgumentException("Ваш вік менший за 18!"); }
- throws: Це ключове слово повідомляє, що метод може викидати певне виключення, і його потрібно вказати в сигнатурі методу.
public void readFile() throws IOException {
}
Використовуючи цей синтаксис, кожен метод, що викликає цей метод, має або вказати це виключення в своїй сигнатурі, або обробити його через блоки try-catch.
6. Ключове слово Finally
Блок finally використовується як частина коду для роботи з виключеннями. Цей блок виконується після того, як виконано код у блоках try-catch
, незалежно від того, чи було викинуто виключення. Він гарантує, що ресурси будуть коректно закриті або звільнені, навіть якщо сталася помилка. Наприклад, коли ми читаємо або записуємо дані у файл, після завершення операції потрібно закрити файл, щоб уникнути витоків даних. Для цього ми використовуємо finally або конструкцію try-with-resources.
Причина цього полягає в тому, що, як ми вже зазначали, блок finally завжди виконується в будь-якому випадку.
- Приклад:
import java.io.*;
public class FinallyFileExample {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("file.txt"));
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("Помилка при читанні з файлу: " + e.getMessage());
} finally {
try {
if (br != null) {
br.close(); // Файл закривається
System.out.println("Файл закрито.");
}
} catch (IOException e) {
System.out.println("Помилка при закритті файлу: " + e.getMessage());
}
}
}
}
Основні характеристики блоку Finally
:
- Завжди виконується: Блок
finally
виконується незалежно від того, чи виникла помилка в блокахtry
чиcatch
. Навіть якщо використано виразreturn
, блокfinally
все одно буде виконаний. - Закриття ресурсів: Ресурси (файли, з'єднання з базами даних, мережеві з'єднання тощо) повинні бути автоматично закриті після використання. Блок
finally
зазвичай використовується для цієї мети. - Використання з метою повернення значень: Навіть якщо в блоці
finally
використовується виразreturn
, операції в цьому блоці все одно виконуватимуться, але значення, яке повертається з методу, буде залежати від операцій, виконаних до виразуreturn
в блоціfinally
.
Перекладено з: Java Exceptions: Nədir, Nə Zaman və Necə İstifadə Edilir?