Ответ
Класс java.lang.Error представляет собой непроверяемое (unchecked) исключение, которое сигнализирует о критических проблемах в среде выполнения Java (JVM), которые приложение, как правило, не должно пытаться обрабатывать.
Ключевые отличия от Exception: |
Аспект | Error |
Exception (проверяемое) |
|---|---|---|---|
| Причина | Серьезные системные сбои (JVM, ресурсы). | Проблемы в логике приложения или внешних взаимодействиях. | |
| Обработка | Обрабатывать не рекомендуется. | Обработка ожидается (через try-catch или throws). |
|
| Наследование | Throwable ← Error |
Throwable ← Exception ← ... |
Типичные примеры Error:
OutOfMemoryError: Нехватка памяти в куче (Heap).StackOverflowError: Переполнение стека вызовов (часто из-за бесконечной рекурсии).VirtualMachineError: Общий класс для сбоев JVM.
Правила обработки:
- Не ловите
Errorдля обычного восстановления работы приложения. Это маскирует фатальные проблемы. - В некоторых сценариях (например, в серверных приложениях) можно поймать
Errorна верхнем уровне, чтобы аккуратно залогировать ошибку и завершить процесс, предотвращая дальнейшую порчу состояния.
Пример:
public class ErrorDemo {
public static void main(String[] args) {
// Вызовет StackOverflowError - непроверяемое исключение типа Error
recursiveMethod(1);
}
private static void recursiveMethod(int i) {
// Отсутствие условия остановки -> бесконечная рекурсия -> Error
recursiveMethod(i + 1);
}
}
// Попытка поймать Error (НЕ РЕКОМЕНДУЕТСЯ для бизнес-логики):
try {
someCriticalOperation();
} catch (OutOfMemoryError e) {
// Логирование и принудительное завершение
log.fatal("JVM out of memory", e);
System.exit(1);
}