- 異常處理的優勢【存在意義】:異常檢測者有檢測出異常的能力,但不知道在出現該異常的情況下應該怎么處理。故庫方法一般會拋出異常給調用者來處理。所以總結而言,異常處理的優勢就是,將處理錯誤(調用者處理)從檢測錯誤(被調用者檢測)中分離出來。
- 異常的分類:
- 系統錯誤:內部系統錯誤,虛擬機拋出。免檢。
- 異常:由程序和外部環境所引起的錯誤,這些錯誤能被程序捕獲和處理。必檢。
- 運行時異常:程序設計錯誤,通常虛擬機拋出。免檢。
- 關於異常處理需要注意的點:
- Exception類,既可能是普通的異常,也可能是運行時異常,故實際編程中最好不要直接拋出Exception,而是拋出其子類。
- 運行時異常,只需拋出,無需捕獲處理(java8允許處理,但是不要畫蛇添足)
- 警告:
- Exception的子類中:
- 必檢異常類型常見的有:FileNotFoundException、IOException(可以動手試試,必須處理的異常);
- 免檢異常類型常見的有:NullPointerExceptin、ArithmeticException、IndexOutofBoundsException、IllegalArgumentException(拋出后無需處理的異常)
- java沒有整數上溢或下溢異常
- Exception的子類中:
- 運行時異常和普通異常:
- 若出現運行時異常,如NullPointerException,直接導致當前線程中斷;
- 若出現普通異常:
- 拋出處理:當前線程中斷;換句話說,當前線程(的當前代碼)不接受你這個異常的存在,我不想理你了。
- 捕獲處理:當前線程不會中斷,后續繼續處理。你這個異常,當前線程是可以接受的,我還會繼續后續處理。
- 很顯然,異常的處理應當視我們的業務邏輯需要,做出相應的合理處置方式。
- 現在,你總該明白什么時候應該(在方法簽名后面)聲明異常,什么時候(在方法中)捕獲異常了吧?