Java Виключення: Що це, Коли і Як Використовувати?

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. Ієрархія виключень

pic

У 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:

  1. Завжди виконується: Блок finally виконується незалежно від того, чи виникла помилка в блоках try чи catch. Навіть якщо використано вираз return, блок finally все одно буде виконаний.
  2. Закриття ресурсів: Ресурси (файли, з'єднання з базами даних, мережеві з'єднання тощо) повинні бути автоматично закриті після використання. Блок finally зазвичай використовується для цієї мети.
  3. Використання з метою повернення значень: Навіть якщо в блоці finally використовується вираз return, операції в цьому блоці все одно виконуватимуться, але значення, яке повертається з методу, буде залежати від операцій, виконаних до виразу return в блоці finally.

Перекладено з: Java Exceptions: Nədir, Nə Zaman və Necə İstifadə Edilir?

Leave a Reply

Your email address will not be published. Required fields are marked *