Обробка винятків. Оператор throws. Класи винятків. Створення своїх класів винятків
Обробка винятків в Java є важливим механізмом для обробки помилок та виключних ситуацій під час виконання програми. Вона дозволяє програмі продовжити роботу або належним чином завершитися, навіть якщо виникла помилка. Винятки представляють аномальні ситуації, які можуть виникати під час виконання програми, такі як спроба ділення на нуль, доступ до неіснуючого файлу, неправильний індекс масиву тощо.
Основні поняття:
1. Виняток (Exception) — це об’єкт, який представляє помилку або виключну ситуацію під час виконання програми.
2. Блоки try-catch-finally — основні елементи для обробки винятків.
Синтаксис:
try {
// Код, який може викликати виняток
} catch (ExceptionType e) {
// Код обробки винятку
} finally {
// Код, який виконається у будь-якому випадку (необов’язковий блок)
}
1. Блок try
Блок try містить код, який може спричинити виникнення винятку. Якщо виникає виняток, програма перестає виконувати цей блок і переходить до відповідного блоку catch.
2. Блок catch
Блок catch перехоплює і обробляє виняток, який виник у блоці try. У цьому блоці можна визначити, що робити, коли виникає певний тип винятку.
Приклад:
public class Main {
public static void main(String[] args) {
try {
int result = 10 / 0; // Це викличе ArithmeticException (ділення на нуль)
} catch (ArithmeticException e) {
System.out.println(“Помилка: Ділення на нуль!”);
}
}
}
3. Блок finally
Блок finally виконується завжди після блоку try-catch, незалежно від того, чи виник виняток. Він часто використовується для очищення ресурсів, таких як закриття файлів або звільнення пам’яті.
Приклад:
public class Main {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // Це викличе ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(“Помилка: Індекс за межами масиву!”);
} finally {
System.out.println(“Цей блок виконається в будь-якому випадку.”);
}
}
}
4. Багато catch блоків
Можна обробляти кілька різних типів винятків за допомогою декількох блоків `catch`. Це дозволяє програмі різним чином реагувати на різні види помилок.
Приклад:
public class Main {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // ArrayIndexOutOfBoundsException
} catch (ArithmeticException e) {
System.out.println(“Помилка: Ділення на нуль!”);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(“Помилка: Індекс за межами масиву!”);
} catch (Exception e) {
System.out.println(“Сталася невідома помилка.”);
}
}
}
5. Перехоплення декількох винятків у одному catch (з Java 7)
Можна об’єднати кілька типів винятків в один блок `catch` за допомогою оператора `|`.
Приклад:
public class Main {
public static void main(String[] args) {
try {
int result = 10 / 0;
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]);
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println(“Сталася арифметична помилка або помилка індексу масиву.”);
}
}
}
6. Генерація винятків (throw)
Іноді програміст може явно “викидати” винятки для позначення певних помилок у програмі. Це робиться за допомогою ключового слова `throw`.
Приклад:
public class Main {
public static void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException(“Вік має бути більше 18.”);
}
}
public static void main(String[] args) {
try {
checkAge(15); // Це викличе IllegalArgumentException
} catch (IllegalArgumentException e) {
System.out.println(“Помилка: ” + e.getMessage());
}
}
}
7. Проголошення винятків (throws)
Якщо метод може викинути виняток, його можна позначити ключовим словом `throws` у сигнатурі методу. Це дозволяє іншим частинам коду знати, що метод може спричинити виняток.
Приклад:
public class Main {
public static void readFile() throws IOException {
FileInputStream file = new FileInputStream(“nonexistent.txt”);
}
public static void main(String[] args) {
try {
readFile(); // Може спричинити IOException
} catch (IOException e) {
System.out.println(“Помилка: файл не знайдено.”);
}
}
}
Типи винятків:
1. Checked Exceptions (Перевіряються на етапі компіляції) — це винятки, які програміст має явно обробляти або проголошувати. Наприклад, IOException, SQLException.
2. Unchecked Exceptions (Не перевіряються на етапі компіляції) — це винятки, які виникають під час виконання програми і зазвичай є помилками програмування. Наприклад, ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException.
Висновок:
- Використовуйте обробку винятків, щоб ваша програма могла належним чином реагувати на помилки.
- Завжди закривайте ресурси (файли, потоки) у блоці finally або за допомогою конструкції try-with-resources.
- Обробляйте конкретні винятки, щоб ваша програма працювала стабільно й передбачувано.
Обробка винятків Оператор throwsКласи винятків Створення своїх класів винятків