1. Знайомство з винятками
Розпочнемо з простої аналогії. Уявіть, що ваша програма — автомобіль, який їде дорогою. Усе гаразд, аж поки не трапляється щось неочікуване: спустилося колесо, закінчився бензин, двигун перегрівся. Якщо не обробити таку ситуацію (наприклад, не поставити запасне колесо або не заправитися), автомобіль зупиниться й далі не поїде. Так само і в програмі: якщо виняток не обробити, програма аварійно завершить роботу.
Виняток (exception) — це обʼєкт, що створюється у момент виникнення проблеми під час виконання програми. Виняток сигналізує: «Стоп! Щось пішло не так!»
Приклади ситуацій, коли виникають винятки:
- Ділення на нуль (10 / 0)
- Спроба звернутися до неіснуючого елемента масиву (arr[999])
- Відкриття файлу, якого немає на диску
- Перетворення рядка "abc" на число (Integer.parseInt("abc"))
Важливо: винятки — це не помилки компіляції (наприклад, друкарські помилки в коді), а проблеми, що виникають уже під час виконання програми.
Чому винятки — це добре?
- Чистіший код: основна логіка програми не захаращується постійними перевірками на кожну дрібницю.
- Гнучкість: помилки можна обробляти централізовано (наприклад, усі помилки читання файлів — в одному місці).
- Надійність: програма не «падає» з незрозумілим повідомленням, а повідомляє, що саме сталося.
2. Винятки (Exceptions) і помилки (Errors)
У Java існують два основні типи проблем, що можуть виникати під час виконання програми:
Помилки (Errors)
Помилки — фатальні, невідновні проблеми, що виникають через збої у роботі самої віртуальної машини Java (JVM). Зазвичай вони повʼязані з ресурсами компʼютера або внутрішніми збоями JVM.
Приклади помилок:
- OutOfMemoryError — закінчилася памʼять.
- StackOverflowError — переповнення стека (наприклад, через нескінченну рекурсію).
Важливо: зазвичай такі помилки не слід намагатися обробляти в коді програми.
Винятки (Exceptions)
Винятки — проблеми, з якими програма може (і повинна) впоратися. Вони виникають через помилки в логіці програми або через зовнішні фактори (наприклад, користувач ввів неочікуване значення).
Приклади винятків:
- NullPointerException — спроба використати null як обʼєкт.
- ArrayIndexOutOfBoundsException — вихід за межі масиву.
- IOException — помилка під час роботи з файлами.
Винятки у Java бувають двох видів:
- Перевірювані винятки (checked exceptions) — компілятор вимагає їхньої обробки (наприклад, IOException).
- Неперевірювані винятки (unchecked exceptions) — компілятор не вимагає їхньої обробки (наприклад, NullPointerException).
Схема: що де розташовано
graph TD
Throwable --> Error
Throwable --> Exception
Exception --> RuntimeException
Exception --> Checked["(інші Exceptions)"]
style Throwable fill:#ffa64d,color:#000
style Exception fill:#ffa64d,color:#000
style Checked fill:#ffa64d,color:#000
style Error fill:#ff4d4d,color:#fff
style RuntimeException fill:#4dff88,color:#000
Пояснення:
- Throwable — корінь усієї ієрархії помилок і винятків у Java.
- Error — фатальні помилки JVM, які зазвичай не обробляють.
- Exception — «звичайні» винятки, які можна і потрібно обробляти.
- RuntimeException — неперевірювані винятки (помилки програміста).
3. Як це виглядає в коді?
Приклад 1: Ділення на нуль
public class ExceptionDemo
{
public static void main(String[] args)
{
int a = 10;
int b = 0;
int c = a / b; // Тут виникне ArithmeticException!
System.out.println("Результат: " + c);
}
}
Що відбудеться?
Програма завершиться з помилкою, і ви побачите повідомлення:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionDemo.main(ExceptionDemo.java:5)
Приклад 2: Звернення до неіснуючого елемента масиву
int[] arr = {1, 2, 3};
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException
Приклад 3: Робота з файлами
import java.io.FileReader;
import java.io.IOException;
public class FileDemo
{
public static void main(String[] args) throws IOException
{
FileReader reader = new FileReader("nofile.txt"); // FileNotFoundException — перевірюваний виняток
int data = reader.read();
System.out.println(data);
reader.close();
}
}
А тепер розберімося, як коректно обробляти такі виняткові ситуації.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ