Я не могу понять, где именно следует использовать RuntimeException
Это, вероятно, потому что вы смотрите на аргумент , то есть люди не соглашаются именно по этому вопросу.
и чем он отличается от обычных исключений и его подклассов.
Очень просто: все подклассы Exception
(кроме RuntimeException
и его подклассов) проверено т.е. компилятор отклонит код, который вы перехватили, или объявит его в сигнатуре метода.Тем не менее, подклассы RuntimeException
не проверены .
Googling дал мне сложный ответ, то есть он должен использоваться для устранения ошибок логики программирования и должен быть выдан, когдаОбычно исключение не должно возникать, например, в блоке по умолчанию конструкции switch-case.
Это общепринятая точка зрения, согласно которой для всего, с чем программа может с пользой работать, вы должны использовать флажокисключения, потому что тогда компилятор заставит вас разобраться с ними.И наоборот, программы, как правило, бесполезно работают с ошибками программиста, поэтому их не нужно проверять.Вот как Java Standard API использует RuntimeException
.
Обсуждение, на которое вы ссылаетесь, вызвано мнением некоторых людей (включая меня), которые считают, что проверенные исключения приводят к плохому коду и поэтому не должныиспользуемый.Поскольку вы не можете отключить проверку исключений в компиляторе, единственный способ сделать это - использовать only RuntimeException
и его подклассы.
Одно наблюдение, что IMO поддерживает это представление, состоит в том, чтообщепринятая мудрость «использовать непроверенные исключения только для ошибок программиста» на самом деле является в основном рационализацией обратного рассуждения: нет причины безопасности кода, почему компилятор не должен заставлять вас иметь дело с ошибками программиста.Однако что-то вроде NullPointerException
и ArrayIndexOutOfBoundsException
может появиться практически где угодно, и если бы они были проверены, никто бы никогда не захотел программировать на Java.Таким образом, дизайнеры языка должны были сделать исключение для них и сделать их непроверенными.Чтобы объяснить это, они придумали историю «непроверенные исключения для ошибок программиста».