1. Java異常類層次結構圖
2. Throwable是所有異常類的父類。有兩個重要的子類:Exception和Error。
Error:是程序無法處理的錯誤。通常是指程序運行時JVM出現的錯誤,例如outofmemory(內存不足)。
這是由於程序設計邏輯有問題,導致程序運行時,JVM本身出現了錯誤,所以是不可以被程序處理的。
Exception:是程序本身可以處理的異常。 例如空指針,算術運算錯誤,數組下標越界等等。
3. 常用Throwable的toString()方法打印異常信息。
toString()會調用getLocalizedMessage()方法,如果異常對象沒有override該方法,則父類Throwable中默認是調用getMessage()方法。
4. 異常處理方法:
try():用於捕獲異常。
catch(): 用於處理異常。
finally(): 無論是否捕獲或者處理異常,finally()中的方法始終會被執行。
所以finally中常用來完成一些善後處理工作,例如文件資源或網絡資源的釋放等。
如果try()或者catch()中含有return語句,則finally()中的語句塊會在return之前被執行。如果finally中也有return語句,則finally中return的值會覆蓋掉try或catch中的return值。
5. finally()語句塊不會被執行的三種情況:
a. 在執行finally語句塊的第一句時,發生了異常。
所以應該確保finally語句塊中不會發生異常。
b. 在執行finally語句塊之前,調用了System.exit(int),exit的參數是非零的,即程序是非正常退出。
c. 程序所在線程死亡。
對於以上三點,其實只需注意第一點,對於後面的兩點,程序都已經異常終止了,finally中的語句塊執不執行已經沒有意義了。