Вопрос проверяет понимание иерархии исключений и философии обработки ошибок в Java.
RuntimeException относится к непроверяемым исключениям.
Компилятор не требует их явно обрабатывать.
Они используются для ошибок программирования.
Такие ошибки обычно невозможно корректно восстановить на месте.
Их обработка чаще выносится на верхний уровень.
В Java исключения делятся на проверяемые и непроверяемые, и это разделение имеет чёткую идею.
Базовая структура:
Throwable
Exception
RuntimeException
Все наследники RuntimeException:
считаются непроверяемыми
не требуют try-catch или throws
RuntimeException используется для:
логических ошибок
некорректного состояния программы
нарушений контрактов
Примеры:
NullPointerException
IllegalArgumentException
IndexOutOfBoundsException
Причины:
обработка не исправляет ошибку
код засоряется try-catch
ошибка должна быть исправлена в логике
RuntimeException является непроверяемым, потому что сигнализирует об ошибках программиста, а не о штатных сбоях среды выполнения.