JAVA異常處理原理淺析


一,異常的分類

1、Throwable是java.lang包中一個專門用來處理異常的類。它有兩個子類,即Error 和Exception,它們分別用來處理兩組異常。

2、Throwable類是整個異常體系類的“父級類”,當然最終追根溯源到底的父類當然要歸於Object類。

Throwable類實現了Serializable接口,表示Throwable可以進行序列化,繼承自Object類,他的子類主要是Error和Exception類還有一個StackRecorder類

3、Exception是Throwable的一個主要子類。Exception下面還有子類,其中一部分子類分別對應於Java程序運行期異常,另一部分是編譯異常(報紅)。

4、常見的運行期異常:

  1. NullPointerException - 空指針引用異常
  2. ClassCastException - 類型強制轉換異常。
  3. IllegalArgumentException - 傳遞非法參數異常。
  4. ArithmeticException - 算術運算異常
  5. ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
  6. IndexOutOfBoundsException - 下標越界異常
  7. NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
  8. NumberFormatException - 數字格式異常
  9. SecurityException - 安全異常
  10. 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類

調用者類

正常打印信息;(看不出問題原因)

自定義異常類

自定義異常打印異常:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM