Подтвердить что ты не робот

Разница между использованием Throwable и Exception в попытке поймать

Иногда я вижу

try {

} catch(Throwable e) {

}

И иногда

try {

} catch(Exception e) {

}

В чем разница

4b9b3361

Ответ 1

Улавливая Throwable, он включает в себя вещи, которые относятся к подклассу Error. Вы, как правило, этого не делаете, за исключением, возможно, самого высокого уровня "поймать всех" нити, где вы хотите регистрировать или иным образом обрабатывать абсолютно все, что может пойти не так. Это было бы более типично в приложении типа структуры (например, сервер приложений или инфраструктура тестирования), где он может запускать неизвестный код и не должен влиять на что-либо, что пойдет не так с этим кодом, насколько это возможно.

Ответ 2

Первый из них ловит все подклассы Throwable (сюда входят Exception и Error), второй - всех подклассов Exception.

Error программно невосстанавливается каким-либо образом и, как правило, не может быть пойман, за исключением целей ведения журнала (который проходит его снова). Exception программно восстанавливается. Его подкласс RuntimeException указывает на ошибку программирования и обычно не может быть пойман.

Ответ 3

Thowable захватывает действительно все, даже ThreadDeath, который по умолчанию бросается, чтобы остановить поток из теперь устаревшего метода Thread.stop(). Поэтому, поймав Throwable, вы можете быть уверены, что никогда не оставите блок try, по крайней мере, не пройдя свой блок catch, но вы также должны быть готовы к обработке OutOfMemoryError и InternalError или StackOverflowError.

Ловушка Throwable наиболее полезна для внешних циклов сервера, которые делегируют все виды запросов внешнему коду, но сами не могут прекратить работу службы.

Ответ 4

Throwable - это суперкласс Exception, а также Error. В обычных случаях мы всегда должны улавливать подклассы Exception, так что основная причина не теряется.

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

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