Что такое проверяемые исключения (checked exceptions) в Java и зачем они нужны?

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

Ответ

Проверяемые исключения (checked exceptions) — это исключения, которые компилятор Java требует явно обработать или объявить в сигнатуре метода. Они представляют ошибки, которые программа может и должна предвидеть и корректно обработать (например, проблемы с вводом-выводом, отсутствие файла).

Зачем они нужны:

  1. Обеспечение надежности: Компилятор заставляет разработчика задуматься об обработке потенциальных проблем, что повышает устойчивость кода.
  2. Улучшение документации: Сигнатура метода с throws явно указывает на возможные ошибки, улучшая читаемость API.
  3. Контроль за ошибками: Предотвращает ситуации, когда исключение может быть проигнорировано по невнимательности.

Пример:

// Компилятор требует либо обработать IOException, либо объявить его в throws
public String readFirstLine(String filePath) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
        return br.readLine();
    }
    // Или обработать на месте:
    // } catch (IOException e) { ... }
}

Альтернатива: Непроверяемые исключения (RuntimeException) используются для ошибок, которые часто указывают на баги в логике программы (например, NullPointerException, IllegalArgumentException).