Sobes.tech
Назад к вопросам
Junior — Middle
74

Можешь назвать стандартные исключения, которые можно проверить в Java?

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

sobes.tech AI

Что хотят услышать интервьюеры:

Ожидают, что будет понятна базовая иерархия исключений в Java и несколько самых частых стандартных типов. Важно уметь отличать checked и unchecked исключения и понимать, когда их обычно ловят. Для QA особенно полезно знать исключения, которые часто встречаются в автотестах и работе с API, файлами и коллекциями.

Определение:

Стандартные исключения в Java — это встроенные типы ошибок, которые JVM и библиотеки Java выбрасывают при некорректной работе программы. Они наследуются от Throwable, чаще всего от Exception или RuntimeException.
Их можно использовать в проверках, чтобы убедиться, что код ведёт себя ожидаемо при ошибках: например, передаёт null, обращается к несуществующему элементу или пытается прочитать отсутствующий файл.

Часто проверяют такие исключения:

  • NullPointerException
  • IllegalArgumentException
  • IndexOutOfBoundsException
  • ArrayIndexOutOfBoundsException
  • ClassCastException
  • NumberFormatException
  • ArithmeticException
  • NoSuchElementException
  • IOException
  • FileNotFoundException

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

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertThrows;

class ExceptionTest {

    @Test
    void shouldThrowNumberFormatException() {
        assertThrows(NumberFormatException.class, () -> Integer.parseInt("abc"));
    }

    @Test
    void shouldThrowIndexOutOfBoundsException() {
        var list = java.util.List.of("a", "b");
        assertThrows(IndexOutOfBoundsException.class, () -> list.get(5));
    }
}

Пояснение кода:

В первом тесте проверяется, что строка "abc" не может быть преобразована в число, поэтому Integer.parseInt выбрасывает NumberFormatException.

Во втором тесте создаётся список из двух элементов, а затем выполняется доступ по несуществующему индексу 5. Это приводит к IndexOutOfBoundsException.

Метод assertThrows в JUnit используется для проверки ожидаемого исключения: если нужное исключение не выброшено, тест упадёт.

Ключевые моменты:

  • Exception в Java делятся на checked и unchecked.
  • IOException и FileNotFoundException — checked исключения, их нужно обрабатывать или пробрасывать.
  • NullPointerException, IllegalArgumentException, IndexOutOfBoundsException и NumberFormatException — unchecked, обычно являются ошибками в логике.
  • В автотестах часто проверяют не только сам факт исключения, но и его тип.
  • Для проверки исключений в тестах обычно используют assertThrows.
  • Для QA важно знать типичные причины исключений в коллекциях, при парсинге строк и работе с файлами.