Sobes.tech
Junior

Классҳои асосии истисно дар Java кадомҳоянд?

sobes.tech AI

Ҷавоб аз AI

В Java ієрархія виключень починається з класу Throwable. Він має два основних підкласи: Error і Exception.

Error:

  • Представляє серйозні проблеми, які зазвичай не слід ловити додатком.
  • Виникають через помилки віртуальної машини (JVM) або оточення.
  • Приклади: OutOfMemoryError, StackOverflowError.

Exception:

  • Представляє умови, які додаток може і повинен обробляти.
  • Поділяється на два типи:
    • Checked Exceptions (перевіряємі виключення):
      • Повинні бути або зловлені (try-catch), або оголошені у сигнатурі методу (throws).
      • Компилятор примусово перевіряє їх обробку.
      • Зазвичай представляють передбачувані, але небажані умови, які можуть виникнути під час виконання.
      • Приклади: IOException, FileNotFoundException, SQLException.
    • Unchecked Exceptions (неперевіряємі виключення):
      • Наслідуються від RuntimeException.
      • Не вимагають обов'язкової обробки або оголошення у сигнатурі методу.
      • Часто вказують на помилки в логіці програми або неправильне використання API.
      • Приклади: NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException.

Ось основні класи виключень:

  • java.lang.Throwable (базовий клас)
    • java.lang.Error (необроблювані помилки)
      • java.lang.OutOfMemoryError
      • java.lang.StackOverflowError
    • java.lang.Exception (оброблювані виключення)
      • java.io.IOException (Checked)
        • java.io.FileNotFoundException (Checked)
      • java.sql.SQLException (Checked)
      • java.lang.RuntimeException (Unchecked)
        • java.lang.NullPointerException
        • java.lang.IllegalArgumentException
        • java.lang.IndexOutOfBoundsException

Таблиця порівнянь:

Особливість Checked Exception Unchecked Exception (RuntimeException) Error
Наслідування Exception (крім RuntimeException та його нащадків) RuntimeException Error
Примусова обробка/оголошення Так Ні Ні
Причина виникнення Передбачувані збої Помилки програмування, неправильне використання Серйозні проблеми JVM/середовища
Відновлення після Часто можливо Рідко (вказує на баг) Майже неможливо

Приклад обробки виключень:

// Приклад обробки checked exception і unchecked exception
public class ExceptionHandlingDemo {

    public void readFile(String fileName) {
        try {
            // Спроба читання файлу - може викинути FileNotFoundException (checked)
            java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(fileName));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                line = reader.readLine();
            }
            reader.close(); // Також може викинути IOException (checked)

            // Приклад unchecked exception (може виникнути, якщо fileName == null)
            int length = fileName.length(); // NullPointerException (unchecked)

        } catch (java.io.FileNotFoundException e) {
            // Обробка FileNotFoundException
            System.err.println("Помилка: Файл не знайдено - " + e.getMessage());
        } catch (java.io.IOException e) {
            // Обробка загальних помилок вводу-виводу
            System.err.println("Помилка читання файлу: " + e.getMessage());
        } catch (java.lang.NullPointerException e) {
            // Обробка NullPointerException - необов'язкова, але хороша практика для відлагодження
            System.err.println("Помилка: Використана нульова посилання - " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        ExceptionHandlingDemo demo = new ExceptionHandlingDemo();
        demo.readFile("non_existent_file.txt"); // Викличе FileNotFoundException
        demo.readFile(null); // Може викликати NullPointerException
    }
}