← Назад к вопросам

Какие бывают исключения?

2.0 Middle🔥 232 комментариев
#Java#Python#Теория тестирования#Фреймворки тестирования

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Иерархия и классификация исключений (Exceptions) в Java

В Java исключения представляют собой события, нарушающие нормальный поток выполнения программы. Они организованы в иерархию классов, корнем которой является класс Throwable. Основная классификация выглядит следующим образом:

Throwable
├── Error (Ошибки)
└── Exception (Исключения)
    ├── RuntimeException (Непроверяемые исключения)
    └── прочие (Проверяемые исключения)

1. Проверяемые исключения (Checked Exceptions)

Это исключения, которые компилятор проверяет на этапе компиляции. Если метод может сгенерировать такое исключение, он должен либо обработать его с помощью try-catch, либо объявить в сигнатуре с помощью ключевого слова throws.

Примеры и типичные случаи использования:

  • IOException и его подклассы (FileNotFoundException, EOFException): возникают при операциях ввода-вывода (работа с файлами, сетью).
  • SQLException: проблемы при работе с базами данных.
  • ClassNotFoundException: когда JVM не может найти требуемый класс.
// Пример с объявлением throws
public String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}

2. Непроверяемые исключения (Unchecked Exceptions)

К ним относятся RuntimeException и его подклассы. Компилятор не требует их обязательного объявления или обработки. Часто являются следствием логических ошибок программиста.

Примеры и причины:

  • NullPointerException: попытка использовать null там, где требуется объект.
  • ArrayIndexOutOfBoundsException: обращение к элементу массива по недопустимому индексу.
  • IllegalArgumentException: передача некорректного аргумента в метод.
  • ArithmeticException: арифметическая ошибка, например, деление на ноль.
  • NumberFormatException: неудачное преобразование строки в число.
// Пример, который может выбросить NullPointerException
public int getStringLength(String str) {
    return str.length(); // Опасное место!
}

3. Ошибки (Errors)

Представляют собой критические проблемы, которые приложение обычно не должно пытаться обрабатывать. Они связаны с окружением JVM и указывают на серьезные сбои.

Примеры:

  • OutOfMemoryError: исчерпана память кучи (Heap).
  • StackOverflowError: переполнение стека вызовов (часто из-за бесконечной рекурсии).
  • VirtualMachineError: общий класс для ошибок JVM.
// Пример, который может привести к StackOverflowError
public class RecursionExample {
    public void recursiveMethod() {
        recursiveMethod(); // Бесконечная рекурсия
    }
}

Практическое значение для QA Automation

Понимание различий критически важно для автоматизатора:

  • Проектирование тестов: Зная, что метод объявляет throws IOException, мы готовим тестовые данные как для успешного сценария, так и для случаев, когда файл не найден или недоступен.
  • Обработка в UI-автоматизации: При работе с Selenium WebDriver непроверяемые исключения (NoSuchElementException, StaleElementReferenceException, TimeoutException) являются частью повседневной практики. Мы используем явные ожидания (Explicit Waits) для их грамотного обработки, а не Thread.sleep().
  • Написание надежных скриптов: Корректная обработка исключений предотвращает падение всего набора тестов из-за одной неустойчивой проверки.
  • Логирование и отчетность: Исключения должны не просто "глохнуть" в catch-блоке, а логироваться с понятным контекстом для последующего анализа.
  • Кастомизированные исключения: В больших фреймворках часто создаются собственные классы исключений (например, TestFrameworkException), чтобы точно идентифицировать источник проблемы (сбой теста, ошибка в данных, падение инфраструктуры).

Таким образом, грамотная работа с исключениями — это не просто синтаксис, а ключевой навык, который напрямую влияет на стабильность, поддерживаемость и информативность автоматизированных тестов.

Какие бывают исключения? | PrepBro