Какую роль выполняет блок catch в обработке исключений Java?

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

Ответ

Блок catch в Java предназначен для перехвата и обработки исключений, которые могут быть сгенерированы в соответствующем блоке try.

Принцип работы:

  1. Код в блоке try выполняется.
  2. Если в try возникает исключение, его выполнение немедленно прерывается.
  3. JVM ищет подходящий блок catch, тип исключения которого соответствует типу выброшенного исключения или является его суперклассом.
  4. Если такой блок найден, управление передается в него для обработки ошибки.

Синтаксис и пример:

try {
    FileReader file = new FileReader("nonexistent.txt"); // Может выбросить FileNotFoundException
    int data = file.read();
} catch (FileNotFoundException e) {
    // Обработка конкретного исключения
    System.err.println("Файл не найден: " + e.getMessage());
    // Возможны корректирующие действия: создание файла, запись в лог, уведомление пользователя
} catch (IOException e) {
    // Более общий обработчик для других ошибок ввода-вывода
    System.err.println("Ошибка ввода-вывода: " + e.getMessage());
}

Важные аспекты:

  • Можно иметь несколько блоков catch. Они проверяются сверху вниз, поэтому более конкретные исключения должны быть указаны раньше общих (например, FileNotFoundException до IOException).
  • Если исключение не перехвачено ни одним catch, оно передается (пробрасывается) в вызывающий метод, что может привести к аварийному завершению программы.
  • Блок catch позволяет не только логировать ошибку, но и выполнять восстановительные действия или преобразовывать исключение в более понятное для вышележащего слоя.