Иерархия исключений в Java - PullRequest
2 голосов
/ 09 апреля 2010

Поскольку Error и Exception являются подклассом класса throwable, мы можем выбросить любую ошибку, время выполнения ex и другие ex. Также мы можем поймать любой из этих типов.

Почему мы обычно ловим только проверенные исключения?

Может ли кто-нибудь предоставить мне хорошие ссылки для исключения с примерами?

Ответы [ 5 ]

6 голосов
/ 09 апреля 2010

Весь смысл проверенного исключения состоит в том, что вы обязаны его поймать. Это тип ошибки, который может возникать при нормальном выполнении программы (например, ошибка ввода-вывода), и приложение должно обрабатывать ее изящно.

И наоборот, непроверенные исключения - это исключения, которые не должны возникать во время нормальной работы программы (они каким-то образом нарушают правила), и поэтому вы не пытаетесь справиться с этим, поскольку вряд ли вы сможете многое сделать.

3 голосов
/ 09 апреля 2010

Я думаю, что ваша предпосылка о том, что непроверенные исключения никогда не обрабатываются, неверна. Конечно, вы никогда не должны обрабатывать NullPointerException, IndexOutOfBoundsException и т. Д., Поскольку они указывают на логические ошибки в программировании, и поэтому их отлов фактически скрывает факт наличия ошибки в программе. Однако некоторые API имеют иерархии исключений, которые имеют корни в RuntimeException, и, если это так, то вы можете в конечном итоге поймать целую кучу таких в вашем приложении; на самом деле, я ранее разработал приложение с графическим интерфейсом, в котором нужно было обработать огромное количество различных исключений, унаследованных от RuntimeException, и этот API, как оказалось, использовался больше, чем любой из API в языке Java, который генерирует проверенные исключения, и в этом случае на самом деле все было наоборот.

Тем не менее, если есть что-то, что абсолютно необходимо обработать, по соглашению, они превращаются в проверенные исключения (наследуются от Exception вместо RuntimeException). Кроме того, компилятор заставляет вас обрабатывать такое исключение или объявлять, что оно выбрасывается (это означает «проверенное исключение»). Таким образом, сочетание соглашения и требования, вероятно, является причиной того, что вы, возможно, обрабатываете больше проверенных, чем непроверенных исключений (потому что те, которые являются срочными, были преобразованы в проверенные исключения по соглашению, или вы игнорируете важные непроверенные исключения, потому что вы не вынуждены справиться с ними). ​​

1 голос
/ 09 апреля 2010

Почему мы обычно ловим только проверенные исключения?

Поскольку в отличие от непроверенных исключений (RuntimeException, Error и их подклассов), вы обязаны их перехватывать. И наоборот, смысл использования непроверенных исключений заключается в том, что вам не нужно перехватывать их, а общий сценарий позволяет им запускать часть программного обеспечения «над» вашим приложением (обычно каркас, контейнер или JVM) справиться с ними. В некоторых случаях вам может понадобиться или решить самостоятельно справиться с этим и поймать это явно. Но это своего рода исключительная ситуация.

Может ли кто-нибудь предоставить мне хорошие ссылки для исключения с примерами?

Может быть, уроки Java о Исключения .

0 голосов
/ 09 апреля 2010

Почему мы обычно ловим только проверенные Исключение?

Проверенные исключения обеспечивают способ заставить программиста задуматься об обработке предсказуемых ошибок хорошим способом. Эти «предсказуемые» ошибки часто возникают при работе с вводом-выводом и сетью. Мы гораздо реже ловим RuntimeExceptions, поскольку они менее предсказуемы, чем проверенные исключения, и обнаруживают ошибки в логике программирования. Например, перехват NullPointerException - это ленивый способ работы со значениями null, когда лучшим решением будет выяснить, почему объект является null, и работать с ним напрямую. Конечно, будут моменты, когда вы захотите поймать RuntimeExceptions, как NumberFormatException.

Обратите внимание, что проверенные исключения важнее в Java, чем большинство языков, и даже языки, построенные на JVM, такие как Scala, не имеют проверенных исключений.

Может ли кто-нибудь предоставить мне хорошие ссылки для исключение с примерами?

См. http://www.javaworld.com/javaworld/jw-07-1998/jw-07-exceptions.html для хорошей статьи об исключениях Java.

0 голосов
/ 09 апреля 2010

Примечание: проверенные исключения несколько противоречивы и во многих кругах потеряли свою популярность (например, Spring Framework оборачивает многие проверенные исключения из библиотек Java в иерархиях RuntimeException, часто в сочетании с ошибкой " fault барьер ") образец обработки.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...