新手了解java 異常處理基礎知識
一、異常體系結構
1.什么是異常
在java程序運行過程中,發(fā)生了一些意料之外的情況就是異常。在java中異常一顆分為兩大類:
(錯誤)Error 和 (異常)Exception。
- 對于(錯誤)Error來說,我們無法通過程序去解決所有的錯誤,僅僅可以去嘗試捕獲這些錯誤,但是無法處理,往往錯誤的發(fā)生對程序來說是重大的致命性問題,需要通過較大的調(diào)整去修正它。
- 對于(異常)Exception來說,它是我們可以通過程序去處理的,我們可以對這些異常情況做出捕獲和處理。
2.異常的體系結構
Throwable
Error Exception
RutimeException
編譯時異常
說明: RutimeException
和一些編譯時異常繼承了Exception
,Exception
和Error
繼承了Throwable
。
運行時異常(RutimeException
)在代碼中我們往往不需要去捕獲它,而是通過處理代碼的邏輯來規(guī)避運行時異常。常見的5種運行時異常:
ClassCastException
(類轉換異常)ArrayIndexOutOfBoundsException
(數(shù)組越界異常)NullPointerException
(空指針)ArrayStoreException
(數(shù)據(jù)存儲異常,操作數(shù)組時類型不一致)NumberFormatException
數(shù)字格式化異常
public class Demo{ public void test(){ //此代碼聲明這里會拋出一個運行時異常 throw new RutimeException(); } } public class DemoTest{ public static void main(String[] args){ Demo demo = new Demo() demo.test(); } }
從上述代碼種可以看出,運行時異常產(chǎn)生時,代碼可以正常的編譯與運行,但是運行結果會拋出一個運行時異常。
說明:運行時異常會向上傳播。
二、異常處理
當異常發(fā)生時,我們需要對其進行處理,處理異常有兩種方式:
一種使用try…catch…finally進行捕獲;
另一種使用throws的方式進行拋出;
try…catch…finally
語法
try { // 可能發(fā)生異常的代碼塊 } catch (/* 需要捕獲的異常類 */) { // 捕獲到異常后的處理代碼塊 } finally { // 不管是否會發(fā)生異常,此代碼塊都會被執(zhí)行 }
示例:
public class Demo1{ public static void main(String[] args){ String[] strs = {"張三","李四","王五"}; try { System.out.println("-------"); System.out.println(strs[3]); // 此處會發(fā)生異常,當異常發(fā)生后,后面的代碼都不會被執(zhí)行到 for (String str : strs) { System.out.println(str); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("++++++++++"); } catch (Exception e) { System.out.println("++++++++++"); }finally{ System.out.println("--------------"); } } }
說明:在try…catch…語句中,try語句中產(chǎn)生異常的代碼后面的代碼不會被執(zhí)行,產(chǎn)生異常后直接到了catch語句塊中。catch語句塊可以寫多個,catch語句分支是從上到下依次找對應類型的,但是注意catch捕獲的異常類型中父類型必須寫在子類型的后面。
finally語句塊是無論異常是否產(chǎn)生都會執(zhí)行的。常用與資源的釋放。
throw 與 throws
- throws是異常處理機制的一種,而throw不是;
- throws是聲明異常類;而throw是拋出異常對象;
- throws可以聲明多個異常類,而throw只能拋出一個異常對象;
- throws是聲明在方法上的,而throw是定義在方法內(nèi)的;
示例:
public class Demo{ public void test() throws Exception{ //此代碼聲明這里會拋出一個異常 throw new Exception(); } } public class DemoTest{ public static void main(String[] args){ Demo demo = new Demo() try { demo.test(); }catch (Exception e) { System.out.println("++++++++++"); }finally{ System.out.println("--------------"); } } }
三、自定義異常
運行時異常
繼承 RutimeException
示例:
public class MyRutimeException extends RutimeException { public MyRutimeException(String message){ super(message); } }
編譯時異常
繼承Exception
示例:
public class MyException extends Exception { public MyException(String message){ super(message); } }
總結
本篇文章就到這里了,希望對你有所幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
Spring Boot項目利用Redis實現(xiàn)session管理實例
本篇文章主要介紹了Spring Boot項目利用Redis實現(xiàn)session管理實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06SpringBoot基于Minio實現(xiàn)分片上傳、斷點續(xù)傳的實現(xiàn)
本文主要介紹了SpringBoot基于Minio實現(xiàn)分片上傳、斷點續(xù)傳的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08