Если я правильно помню в .NET, можно зарегистрировать "глобальные" обработчики для необработанных исключений. Мне интересно, есть ли что-то подобное для Java.
Есть ли необработанный обработчик исключений в Java?
Ответ 1
Да, там defaultUncaughtExceptionHandler
, но он запускается только в том случае, если Thread
не имеет uncaughtExceptionHandler
.
Ответ 2
да
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.UncaughtExceptionHandler.html
Ответ 3
Да, существует "почти" глобальный такой обработчик, доступный в ThreadGroup. Это не так глобально, как тот, о котором вы говорите, но вы можете в основном реализовать ту же функциональность.
Начиная с Java 5, существует аналогичная функциональность, доступная непосредственно на класс Thread.
Ответ 4
Часто фреймворки Java, такие как Struts и Spring (и Servlet Spec, IIRC), позволяют вам устанавливать глобальный обработчик исключений. Однако эти механизмы специфичны для каждой структуры.
Ответ 5
Предполагая, что это как catch (...) в С++, вы бы сделали:
try { // your code here } catch(Throwable ex) { // any sort of exception, even if the VM has choked on a peanut }
В общем, это не очень хорошая идея, если вы не имеете дело с сторонним кодом (вы должны всегда бросать подклассы Exception (а не RuntimeException) в свой собственный код - если только это не указывает на ошибку программиста, которая должна быть delt с помощью модульного тестирования.