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