什麼是Throwable類別? Throwable類是Java語言中所有錯誤或異常的超類,是對所有異常進行整合的一個普通類,其作用是提取保存在堆疊中的錯誤訊息。
Error類別是Throwable類別的子類,包括系統異常、虛擬機器異常等使用者無法阻止的問題。
Exception類別也是Throwable類別的子類,它是程式本身可以處理的異常,分為運行時異常(checked)和非執行時間異常(unchecked)。其中運行時異常可處理,也可不處理;非運行時異常必須處理。
執行時期異常都是RuntimeException類別及其子類別異常,例如NullPointerException、IndexOutOfBoundsException等,這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理。這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度盡可能避免這類異常的發生。
當出現RuntimeException的時候,我們可以不處理,一般由虛擬機器接手。
出現運行時異常後,如果沒有捕獲處理這個異常(即沒有catch),系統會把異常一直往上層拋,一直到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之後,如果是線程,這個線程也就退出了。如果是主程式拋出的異常,那麼這整個程式也就退出了。運行時異常是Exception類的子類,也有一般異常的特點,就是可以被catch塊處理。只不過往往我們不會對它處理,也就是說,你如果不對運行時異常進行處理,那麼出現運行時異常之後,要么是線程中止,要么是主程式終止。
如果不想終止,則必須捕獲所有的運行時異常,絕不讓這個處理執行緒退出。佇列裡面出現異常數據,正常的處理應該是把異常資料捨棄,然後再記錄日誌。不應該因為異常資料的存在而影響下面對正常資料的處理。
非執行時期異常是RuntimeException以外的異常,類型上都屬於Exception類別及其子類別。例如:IOException、SQLException等以及使用者自訂的Exception例外。對於這種異常,Java編譯器強制要求我們必須對出現的這些異常進行catch並處理,否則程式就無法編譯通過。所以,面對這種異常不管我們願不願意,都要寫一大堆catch塊去處理可能的異常。