В Java существует 2 основных типа исключений:
- checked
- unchecked
непроверенные исключения далее разбиваются на RuntimeException и Error.
RuntimeExceptions - это ошибки программиста (ArrayIndexOutOfBoundsException), а ошибки - это проблемы в ВМ (OutOfMemoryError).
Вы не должны перехватывать RuntimeExceptions - вы должны исправить свой код, чтобы он не генерировал исключение.
Вы не должны перехватывать ошибки, поскольку виртуальная машина, вероятно, находится в состоянии, когда вы не можете ничего сделать для их восстановления.
Если ваш основной сервер не улавливает непроверенное исключение, он вылетит.