В чем разница между Error и Exception в Java?

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

Ответ

И Error, и Exception являются наследниками класса Throwable, но предназначены для принципиально разных ситуаций.

Критерий Error Exception
Природа Критические, невосстановимые системные проблемы. Исключительные ситуации в работе приложения, которые часто можно обработать.
Обработка Обычно не перехватываются и не обрабатываются. Предназначены для перехвата и обработки (try-catch).
Наследование ThrowableError. ThrowableException.
Примеры OutOfMemoryError, StackOverflowError, VirtualMachineError. IOException, SQLException, RuntimeException (и его наследники, например, NullPointerException).

Exception делится на два основных типа:

  1. Checked Exceptions (проверяемые): Компилятор обязывает их либо обработать (try-catch), либо объявить в сигнатуре метода (throws).
    // Checked Exception (обязательна обработка)
    try {
        Files.readAllLines(Path.of("file.txt"));
    } catch (IOException e) {
        System.err.println("Файл не найден или недоступен.");
    }
  2. Unchecked Exceptions (непроверяемые): Наследники RuntimeException. Компилятор не требует их явной обработки.
    // Unchecked Exception (обработка не обязательна)
    int result = 10 / 0; // Выбросит ArithmeticException

Правило: Ловите и обрабатывайте Exception для восстановления логики программы. Error обычно указывает на фатальные проблемы среды выполнения, и попытка их «исправить» часто бессмысленна.