日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式

發(fā)布時間:2024/1/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

UncaughtExceptionHandler:java未捕獲的異常/錯誤

@(JAVA)[java]

java有一部分異常屬于運行時異常,這類異常發(fā)生時通過會導(dǎo)致程序發(fā)生錯誤,導(dǎo)致退出。如數(shù)據(jù)下標(biāo)過大,內(nèi)存不足等。

對于這類異常,默認(rèn)的情況是打印相關(guān)的錯誤stack,然后退出程序。但這對于用戶而言十分不友好;另外,有可以發(fā)生異?;蛘咤e誤時不希望程序退出。

此時可以為線程添加一個默認(rèn)的異常處理器。

主要使用

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {public void uncaughtException(Thread thread, Throwable thrown) {.....} }

來處理未捕獲的異常。也可以使用setUncaughtExceptionHandler,但這只對當(dāng)前線程生效,default的話默認(rèn)對所有線程生效。

另注意,Error和Exception 都實現(xiàn)了Throwable,而它們之間沒有直接關(guān)系

public class UncaughtExceptionHandlerDemo {private static Logger LOG = LoggerFactory.getLogger(UncaughtExceptionHandlerDemo.class);public static void main(String[] args) {setupDefaultUncaughtExceptionHandler();//NO argument pass to main, so ArrayIndexOutOfBoundsException will occur.System.out.println(args[1]);}public static void setupDefaultUncaughtExceptionHandler() {Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {public void uncaughtException(Thread thread, Throwable thrown) {try {handleUncaughtException(thrown);} catch (Error err) {// LOG.error("Received error in main thread.. terminating server...", err);System.err.println("Received error in main thread.. terminating server..." + err);Runtime.getRuntime().exit(-2);}catch(Exception e){System.err.println("Exception happen. Cause: " + e.getMessage());e.printStackTrace();}}});}public static void handleUncaughtException(Throwable t) throws Exception {if (t != null && t instanceof Error) {if (t instanceof OutOfMemoryError) {try {System.err.println("Halting due to Out Of Memory Error..." + Thread.currentThread().getName());} catch (Throwable err) {//Again we don't want to exit because of logging issues.}Runtime.getRuntime().halt(-1);} else {//Running in daemon mode, we would pass Error to calling thread.throw (Error) t;}}else{throw (Exception) t;}}}

總結(jié)

以上是生活随笔為你收集整理的UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。