В каких случаях в Java применяются checked исключения?

«В каких случаях в Java применяются checked исключения?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Checked исключения в Java — это исключения, которые компилятор проверяет на этапе компиляции. Они используются для ожидаемых ошибок, от которых программа может восстановиться. Классы checked исключений наследуются от Exception, но не от RuntimeException.

Когда использовать:

  • Ошибки ввода-вывода (файл не найден, сетевой сбой).
  • Ошибки парсинга/валидации данных.
  • Когда требуется, чтобы вызывающий код явно обработал исключительную ситуацию (через try-catch) или объявил его в throws.

Пример (обязательная обработка):

// Метод объявляет checked исключение
public String readFirstLine(String filePath) throws IOException {
    return Files.readAllLines(Paths.get(filePath)).get(0);
}

// Вызывающий код должен его обработать
public void processFile() {
    try {
        String line = readFirstLine("data.txt");
    } catch (IOException e) { // Обязательный catch
        System.err.println("Файл не найден или ошибка чтения");
    }
}

Почему и критика:

  • Цель: Принудить разработчика к обработке предсказуемых ошибок, повышая надежность.
  • Критика: Часто приводит к раздуванию кода try-catch/throws. В современных фреймворках и библиотеках (Spring, JPA) предпочтение отдается unchecked исключениям (RuntimeException).