Ответ
И Error, и Exception являются наследниками класса Throwable, но предназначены для принципиально разных ситуаций.
| Критерий | Error | Exception |
|---|---|---|
| Природа | Критические, невосстановимые системные проблемы. | Исключительные ситуации в работе приложения, которые часто можно обработать. |
| Обработка | Обычно не перехватываются и не обрабатываются. | Предназначены для перехвата и обработки (try-catch). |
| Наследование | Throwable ← Error. |
Throwable ← Exception. |
| Примеры | OutOfMemoryError, StackOverflowError, VirtualMachineError. |
IOException, SQLException, RuntimeException (и его наследники, например, NullPointerException). |
Exception делится на два основных типа:
- Checked Exceptions (проверяемые): Компилятор обязывает их либо обработать (
try-catch), либо объявить в сигнатуре метода (throws).// Checked Exception (обязательна обработка) try { Files.readAllLines(Path.of("file.txt")); } catch (IOException e) { System.err.println("Файл не найден или недоступен."); } - Unchecked Exceptions (непроверяемые): Наследники
RuntimeException. Компилятор не требует их явной обработки.// Unchecked Exception (обработка не обязательна) int result = 10 / 0; // Выбросит ArithmeticException
Правило: Ловите и обрабатывайте Exception для восстановления логики программы. Error обычно указывает на фатальные проблемы среды выполнения, и попытка их «исправить» часто бессмысленна.