Java運行時異常與通常異常有什麼不同?

異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。java

1、Error和Exception

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

Error:表示由JVM所偵測到的沒法預期的錯誤,因爲這是屬於JVM層次的嚴重錯誤,致使JVM沒法繼續執行,所以,這是不可捕捉到的,沒法採起任何恢復的操做,頂多只能顯示錯誤信息。多線程

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

2、Java兩類主要的異常

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

checked異常也就是咱們常常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求咱們必需對出現的這些異常進行catch。因此,面對這種異常無論咱們是否願意,只能本身去寫一大堆catch塊去處理可能的異常。日誌

可是另一種異常:runtime exception,也稱運行時異常,咱們能夠不處理。當出現這樣的異常時,老是由虛擬機接管。好比:咱們歷來沒有人去處理過NullPointerException異常,它就是運行時異常,而且這種異常仍是最多見的異常之一。隊列

3、Java運行異常

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

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

異常處理的目標之一就是爲了把程序從異常中恢復出來。更多請訪問上海尚學堂Java培訓,獲取Java300集和麪試全集等學習資料和免費試學機會。編譯器

相關文章
相關標籤/搜索