1 Error類和Exception類
Error類和Exception類都是繼承Throwable類
1.1 Error(錯誤)
是系統中的錯誤,程序員是不能改變的和處理的,是在程序編譯時出現的錯誤,只能通過修改程序才能修正。一般是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對於這類錯誤的導致的應用程序中斷,僅靠程序本身無法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。
1.2 Exception(異常)
表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該儘可能處理異常,使程序恢復運行,而不應該隨意終止異常。
Exception又分爲兩類
- CheckedException:(編譯時異常) 需要用try——catch顯示的捕獲或者直接throws異常。
- UnCheckedException(RuntimeException):(運行時異常)不需要捕獲,對於程序錯誤(不可恢復)的異常使用RuntimeException。
1.3 常見的RuntimeException異常
- NullPointerException - 空指針引用異常
- ClassCastException - 類型強制轉換異常。
- IllegalArgumentException - 傳遞非法參數異常。
- ArithmeticException - 算術運算異常
- ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
- IndexOutOfBoundsException - 下標越界異常
1.4 常見的CheckedException異常
- SQLException
- OException
- ClassNotFoundException
- NamingException,
- ServletException,
我們在編寫程序過程中try——catch捕獲到的或者直接throws的異常都是CheckedException。
2 throw和throws
2.1 位置不同
- throws 用在函數頭上,後面跟的是異常類,可以跟多個;
- throw 用在函數體內,後面跟的是異常對象。
2.2 功能不同
- throws 用來聲明異常,讓調用者只知道該功能可能出現的問題,可以給出預先的處理方式;
- throw 拋出具體的問題對象,執行到throw,功能就已經結束了,跳轉到調用者,並將具體的問題對象拋給調用者。也就是說 throw 語句獨立存在時,下面不要定義其他語句,因爲執行不到。
- throws 表示出現異常的一種可能性,並不一定會發生這些異常;throw 則是拋出了異常,執行throw 則一定拋出了某種異常對象。
- 兩者都是消極處理異常的方式,只是拋出或者可能拋出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。