Технически,
Error как и
любой другой Throwable можно поймать в блок
catch. Такой код абсолютно валидный и скомпилируется без проблем.
На практике, согласно
спецификации, значение исключения типа
Error – необрабатываемая ошибка, ловить которую нет смысла.
Более того, выброс исключения подтипа
VirtualMachineError означает, что JVM находится в сломанном состоянии. Дальнейшая работа непредсказуема:
OutOfMemoryError приводит к невозможности создания новых объектов,
StackOverflowError теряет фреймы стека вызова, и так далее.
Так как ловить
Error не нужно, объявление её в секции
throws сигнатуры метода необязательно. Как и
RuntimeException,
Error – разновидность unchecked exception.