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

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

Ответ

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

Краткое объяснение иерархии:

Throwable
├── Error (Unchecked) — e.g., OutOfMemoryError, StackOverflowError
└── Exception
    ├── RuntimeException (Unchecked) — e.g., NullPointerException
    └── Все остальные (Checked) — e.g., IOException
Ключевые отличия Error от checked исключений: Критерий Checked Exception (e.g., IOException) Error (e.g., OutOfMemoryError)
Обработка компилятором Требует try-catch или throws Не требует
Природа Восстановимые условия, ожидаемые в работе приложения Критические, часто невосстановимые сбои системы или JVM
Цель обработки Восстановление нормального потока выполнения Как правило, корректное завершение работы приложения

Пример кода:

// Компиляция пройдёт успешно. Объявлять 'throws' для Error не обязательно.
public void causeFatalError() {
    throw new LinkageError("Несовместимость классов");
}

// Для сравнения: checked исключение БУДЕТ требовать обработки.
public void readFile() throws IOException { // 'throws' ОБЯЗАТЕЛЕН
    Files.readAllBytes(Paths.get("file.txt"));
}