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

Иногда я вижу

try { } catch(Throwable e) { } 

И иногда

 try { } catch(Exception e) { } 

В чем разница

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

Первая из них ловит все подclassы Throwable (это включает в себя Exception и Error ), вторая – все подclassы Exception .

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

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

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

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

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

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

  • Служба имеет нулевые приложения (неинфраструктурные) конечные точки
  • Условия, когда, наконец, не выполняются в блоке .net try..finally
  • Хорошие шаблоны для обработки ошибок VBA
  • Обработка исключений - это хороший способ?
  • Что на самом деле происходит в try {return x; } наконец {x = null; } заявление?
  • Полезно ли использовать «goto» на языке, который поддерживает циклы и функции? Если да, то почему?
  • Вы (действительно) пишете безопасный код исключения?
  • Насколько медленны исключения Java?
  • Исключение в streamе "main" java.io.FileNotFoundException: Ошибка
  • VS2010 не показывает необработанное сообщение об исключении в приложении WinForms в 64-разрядной версии Windows
  • Исключение исключения: деление на ноль
  • Давайте будем гением компьютера.