Зачем ловить исключения в Java, когда вы можете ловить Throwables? - PullRequest
59 голосов
/ 24 февраля 2009

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

Мы решили непосредственную проблему, ловя Throwables, а не Exceptions, но это заставило меня задуматься о том, почему вы когда-нибудь захотите ловить Exception, а не Throwables, потому что тогда вы пропустите ошибки.

Итак, зачем вам ловить исключения, когда вы можете ловить Throwables ?

Ответы [ 14 ]

1 голос
/ 24 февраля 2009

Обычно при программировании вы должны ловить только определенное исключение (например, IOException). Во многих программах вы можете увидеть очень высокий уровень

try {
    ...
} catch(Exception e) {
    ...
}

Это ловит все ошибки, которые могут быть исправлены, и все те, которые указывают на ошибку в вашем коде, например InvalidArgumentException, NullPointerException. Затем вы можете автоматически отправлять электронную почту, отображать окно сообщения или что угодно, так как сама JavaVM все еще работает нормально.

Все, что происходит от Error - это что-то очень плохое, с этим ничего не поделаешь. Вопрос в том, имеет ли смысл ловить OutOfMemoryError или VirtualMachineError. (Это ошибка в самом JavaVM, возможно, вы даже не можете отобразить окно сообщения или отправить электронное письмо)

Вероятно, вы не должны быть классом, производным от Error, вы должны наследовать от Exception или RuntimeException.

0 голосов
/ 21 февраля 2016

Почему бы не поймать их всех? Затем зарегистрируйте их, по крайней мере, вы знаете, что у вас есть ошибка. Так что лучше ловить Throwable / s, чем Exception / s только.

0 голосов
/ 24 февраля 2009

Нет смысла ловить Ошибка .

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

Например, одна распространенная ошибка -

java.lang.OutOfMemoryError

Существует НИЧЕГО , которое вы можете сделать, когда это произойдет. Уже слишком поздно, JVM исчерпала все свои возможности, чтобы получить больше памяти, но это невозможно.

См. Этот другой ответ, чтобы понять больше о трех видах исключений .

0 голосов
/ 24 февраля 2009

Немного не по теме, но вы также можете посмотреть эту очень хорошую статью об исключениях.

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