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