Назад к вопросам
Junior
75
questionbank

Какие ключевые классы исключений существуют в Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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
    }
}