Является ли класс Error в Java проверяемым (checked) исключением?

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

Ответ

Нет. Класс java.lang.Error и его подклассы (например, OutOfMemoryError, StackOverflowError) являются непроверяемыми (unchecked) исключениями.

Объяснение: В Java иерархия исключений делится на:

  1. Checked Exceptions (Exception, кроме RuntimeException): Компилятор требует их обработки (блок try-catch) или объявления в throws.
  2. Unchecked Exceptions:
    • RuntimeException и его подклассы (логические ошибки программы).
    • Error и его подклассы (критические системные сбои).

Error представляет серьёзные проблемы, с которыми приложение, как правило, не должно или не может справиться (например, сбой виртуальной машины, нехватка памяти). Поэтому компилятор не обязывает вас их перехватывать.

Пример:

public void riskyMethod() {
    // Компилятор НЕ требует обработки этого Error.
    // Это unchecked исключение.
    throw new VirtualMachineError("Critical JVM failure") { };
}

Best practice: Перехватывать Error (например, в корневом обработчике потоков) обычно не рекомендуется, так как это часто указывает на невосстановимую ситуацию.