java題-java執行時異常與一般異常有何異同?
今天面試時,筆試裡面就有這題印象深刻(因為不會)
Throwable是所有Java程式中錯誤處理的父類,有兩種資類:Error和Exception。
Error:表示由JVM所偵測到的無法預期的錯誤,由於這是屬於JVM層次的嚴重錯誤,導致JVM無法繼續執行,因此,這是不可捕捉到的,無法採取任何恢復的操作,頂多只能顯示錯誤資訊。Error類體系描述了Java執行系統中的內部錯誤以及資源耗盡的情形.應用程式不應該丟擲這種型別的物件(一般是由虛擬機器丟擲).假如出現這種錯誤,除了盡力使程式安全退出外,在其他方面是無能為力的.
Exception:表示可恢復的例外,這是可捕捉到的。
Java提供了兩類主要的異常
但是另外一種異常:runtime exception,也稱執行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機器接管。比如:我們從來沒有人去處理過NullPointerException
出現執行時異常後,系統會把異常一直往上層拋,一直遇到處理程式碼。如果沒有處理塊,到最上層,如果是多執行緒就由Thread.run()丟擲,如果是單執行緒就被main()丟擲。丟擲之後,如果是執行緒,這個執行緒也就退出了。如果是主程式丟擲的異常,那麼這整個程式也就退出了。執行時異常是
如果不想終止,則必須撲捉所有的執行時異常,決不讓這個處理執行緒退出。佇列裡面出現異常資料了,正常的處理應該是把異常資料捨棄,然後記錄日誌。不應該由於異常資料而影響下面對正常資料的處理。在這個場景這樣處理可能是一個比較好的應用,但並不代表在所有的場景你都應該如此。如果在其它場景,遇到了一些錯誤,如果退出程式比較好,這時你就可以不太理會執行時異常,或者是通過對異常的處理顯式的控制程式退出。異常處理的目標之一就是為了把程式從異常中恢復出來。