RuntimeException和Exception

Throwable是所有Java程序中錯誤處理的父類,有兩種資類:Error和Exception。

1、Error:表示由JVM所偵測到的無法預期的錯誤,由於這是屬於JVM層次的嚴重錯誤,導致JVM無法繼續執行,因此,這是不可捕捉到的,無法採取任何恢復的操作,頂多只能顯示錯誤信息。

2、Exception:表示可恢復的例外,這是可捕捉到的。

Java提供了兩類主要的異常:runtime exception和checked exception。

checked exception,也就是我們經常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。


runtime exception,也稱運行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,並且這種異常還是最常見的異常之一。

    出現運行時異常後,系統會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之後,如果是線程,這個線程也就退出了。如果是主程序拋出的異常,那麼這整個程序也就退出了。運行時異常是Exception的子類,也有一般異常的特點,是可以被Catch塊處理的。只不過往往我們不對他處理罷了。也就是說,你如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程序終止。

    如果不想終止,則必須撲捉所有的運行時異常,決不讓這個處理線程退出。隊列裏面出現異常數據了,正常的處理應該是把異常數據捨棄,然後記錄日誌。不應該由於異常數據而影響下面對正常數據的處理。在這個場景這樣處理可能是一個比較好的應用,但並不代表在所有的場景你都應該如此。如果在其它場景,遇到了一些錯誤,如果退出程序比較好,這時你就可以不太理會運行時異常,或者是通過對異常的處理顯式的控制程序退出。

總的來說,異常分兩種:
 1:編譯時被檢查的異常,只要是Exception及其子類都是編譯時被檢測的異常。
該異常編譯時,如果沒有處理(沒有拋也沒有try),編譯失敗。
 2:運行時異常,其中Exception有一個特殊的子類RuntimeException,以及RuntimeException的子類是運行異常,也就說這個異常是編譯時不被檢查的異常。
該異常方生建議不處理,讓程序停止,需要對代碼進行修正。

編譯時被檢查的異常和運行時異常的區別:
 1、編譯被檢查的異常在函數內被拋出,函數必須要聲明,否編譯失敗。
 2、聲明的原因:是需要調用者對該異常進行處理。
 3、運行時異常如果在函數內被拋出,在函數上不需要聲明。
 4、不聲明的原因:不需要調用者處理,運行時異常發生,已經無法再讓程序繼續運行,所以,不讓調用處理的,直接讓程序停止,由調用者對代碼進行修正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章