例外をうっかりキャッチし損ねると、
ログも出力されず原因究明が困難になったりします。

そんなときには、UncaughtExceptionHandlerを
設定しておくと便利です。

例外をキャッチし損ねるのを防ぐ

Thread.UncaughtExceptionHandlerは、
スレッドがキャッチされない例外により終了したときに
呼び出されるメソッドを定義したインタフェース。(ハンドラともいう)

例えば、スタンドアロンなどで例外をキャッチできない場合は、
main()まで戻されて終了する。

そのときThread.UncaughtExceptionHandlerを設定しておけば、
main()を終了する前にUncaughtExceptionHandlerを呼び出してから
終了する。

これを利用することで、うっかり例外をキャッチしそびれても
最後の砦となって、ログ出力などが可能。

メインスレッドにおける設定

メインスレッドでUncaughtExceptionHandlerを設定する場合は、
次のようになる。

例.UncaughtExceptionHandlerの設定
public class UncaughtExceptionHandlerSample {
    private static final Logger log = LoggerFactory.getLogger(UncaughtExceptionHandlerSample.class);
 
    private static final UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER = new UncaughtExceptionHandler() {
 
        /** キャッチできない場合は、ログに書き込む */
        @Override public void uncaughtException(Thread thread, Throwable throwable) {
            log.error("キャッチできない例外発生", throwable);
        }
 
    };
 
    public static void main(String[] args) {
        Thread.currentThread().setUncaughtExceptionHandler(UNCAUGHT_EXCEPTION_HANDLER);
    }
 
}

万が一ということもあるので、
スタンドアロンの場合などは設定しておいた方がいい。