一,異常的分類
1、Throwable是java.lang包中一個專門用來處理異常的類。它有兩個子類,即Error 和Exception,它們分別用來處理兩組異常。
2、Throwable類是整個異常體系類的“父級類”,當然最終追根溯源到底的父類當然要歸於Object類。
Throwable類實現了Serializable接口,表示Throwable可以進行序列化,繼承自Object類,他的子類主要是Error和Exception類還有一個StackRecorder類。
3、Exception是Throwable的一個主要子類。Exception下面還有子類,其中一部分子類分別對應於Java程序運行期異常,另一部分是編譯異常(報紅)。
4、常見的運行期異常:
- NullPointerException - 空指針引用異常
- ClassCastException - 類型強制轉換異常。
- IllegalArgumentException - 傳遞非法參數異常。
- ArithmeticException - 算術運算異常
- ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
- IndexOutOfBoundsException - 下標越界異常
- NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
- NumberFormatException - 數字格式異常
- SecurityException - 安全異常
- UnsupportedOperationException - 不支持的操作異常
二,java對異常的處理方式
如果出現問題,java會根據問題所描述的異常類,創建一個對象(實例),然后將該對象即問題拋給上一級,具體步驟:
method具體出異常處 -> main主方法 -> jvm虛擬機 -> 將異常出現的位置和原因打印在控制台。
三,異常的處理方式
1.問題可以自己處理掉
try-catch
try{
//異常可能發生的代碼
}catch(//要抓捕的異常){
//異常處理方式
}
PS:return
結論,try,catch,finally語句塊的return的優先級由低到高,先執行try中return之前的語句,如果遇到異常,則執行catch語句中return之前的代碼,最后執行finally語句塊,finally語句塊中如果有return,那么程序就會提前返回,如果沒有,則返回catch語句塊中的return,如果沒有遇到異常,則直接執行finally中的語句塊,再看finally語句塊中是否有return來決定返回結果。
參考:https://www.cnblogs.com/mfrank/p/7895660.html
2.問題自己處理不了
throws
如果自己定義一個person類,成員變量是age,int類型,在set中規定年齡必須在0-150之間否則會throw new Exception(“您的年齡有誤,請重新輸入”),並在類上標記throws Exception,告知調用者;
當另外一個類Person p=new Person();p.setAge(-10)會報編譯時期異常,需要繼續向上拋。(PS;若throw new RunTimeException則不報紅,見下圖)
throw:是將異常對象拋給調用者
throws:只是一個對方法的聲明,告知調用者此方法存在異常。
3.自定義異常:
就是要一個規范的異常類名,根據異常類名能夠分析出問題所在的原因;、
找一個類,繼承Exception,或者RuntimeException。
例子:
person類
調用者類
正常打印信息;(看不出問題原因)
自定義異常類
自定義異常打印異常: