Java基礎:error與exception的區別【轉載】
阿新 • • 發佈:2018-12-10
注:原文地址:【Java面試題】20 執行時異常和一般異常有何區別;https://www.cnblogs.com/guweiwei/p/6610450.html
Throwable 是所有 Java 程式中錯誤處理的父類 ,有兩種資類: Error 和 Exception 。
- Error :表示由 JVM 所偵測到的無法預期的錯誤,由於這是屬於 JVM 層次的嚴重錯誤 ,導致 JVM 無法繼續執行,因此,這是不可捕捉到的,無法採取任何恢復的操作,頂多只能顯示錯誤資訊。
- Exception :表示可恢復的例外,這是可捕捉到的。
Java 提供了兩類主要的異常 :runtime exception 和 checked exception 。
- checked 異常也就是我們經常遇到的 IO 異常,以及 SQL 異常都是這種異常。 對於這種異常, JAVA 編譯器強制要求我們必需對出現的這些異常進行 catch 。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆 catch 塊去處理可能的異常。
- 但是另外一種異常: runtime exception ,也稱執行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機器 接管。比如:我們從來沒有人去處理過 NullPointerException 異常,它就是執行時異常,並且這種異常還是最常見的異常之一。
出現執行時異常後,系統會把異常一直往上層拋,一直遇到處理程式碼。如果沒有處理塊,到最上層,如果是多執行緒就由 Thread.run()丟擲 ,如果是單執行緒就被 main() 丟擲
如果不想終止,則必須捕捉所有的執行時異常,決不讓這個處理執行緒退出。佇列裡面出現異常資料了,正常的處理應該是把異常資料捨棄,然後記錄日誌。不應該由於異常資料而影響下面對正常資料的處理。 在這個場景這樣處理可能是一個比較好的應用,但並不代表在所有的場景你都應該如此。如果在其它場景,遇到了一些錯誤,如果退出程式比較好,這時你就可以不太理會執行時異常 ,或者是通過對異常的處理顯式的控制程式退出。
異常處理的目標之一就是為了把程式從異常中恢復出來 。