欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

新手了解java 異常處理基礎(chǔ)知識

 更新時間:2021年07月06日 08:47:22   作者:王星偉QAQ  
Java中異常提供了一種識別及響應(yīng)錯誤情況的一致性機(jī)制,有效地異常處理能使程序更加健壯、易于調(diào)試。那么這篇文章總結(jié)了Java有效處理異常的三個原則,有需要的朋友們可以參考借鑒

一、異常體系結(jié)構(gòu)

1.什么是異常

在java程序運(yùn)行過程中,發(fā)生了一些意料之外的情況就是異常。在java中異常一顆分為兩大類:

(錯誤)Error 和 (異常)Exception。

  • 對于(錯誤)Error來說,我們無法通過程序去解決所有的錯誤,僅僅可以去嘗試捕獲這些錯誤,但是無法處理,往往錯誤的發(fā)生對程序來說是重大的致命性問題,需要通過較大的調(diào)整去修正它。
  • 對于(異常)Exception來說,它是我們可以通過程序去處理的,我們可以對這些異常情況做出捕獲和處理。

2.異常的體系結(jié)構(gòu)

​ Throwable

​ Error Exception

​ RutimeException 編譯時異常

說明: RutimeException和一些編譯時異常繼承了Exception ,ExceptionError繼承了Throwable

運(yùn)行時異常(RutimeException)在代碼中我們往往不需要去捕獲它,而是通過處理代碼的邏輯來規(guī)避運(yùn)行時異常。常見的5種運(yùn)行時異常:

  1. ClassCastException(類轉(zhuǎn)換異常)
  2. ArrayIndexOutOfBoundsException(數(shù)組越界異常)
  3. NullPointerException(空指針)
  4. ArrayStoreException(數(shù)據(jù)存儲異常,操作數(shù)組時類型不一致)
  5. NumberFormatException 數(shù)字格式化異常
public class Demo{
    public void test(){
        //此代碼聲明這里會拋出一個運(yùn)行時異常
       throw new RutimeException();
    }
}
public class DemoTest{
    public static void main(String[] args){
       Demo demo = new Demo()
           demo.test();
    }
}

從上述代碼種可以看出,運(yùn)行時異常產(chǎn)生時,代碼可以正常的編譯與運(yùn)行,但是運(yùn)行結(jié)果會拋出一個運(yùn)行時異常。

說明:運(yùn)行時異常會向上傳播。

二、異常處理

當(dāng)異常發(fā)生時,我們需要對其進(jìn)行處理,處理異常有兩種方式:

一種使用try…catch…finally進(jìn)行捕獲;

另一種使用throws的方式進(jìn)行拋出;

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ā)生異常,當(dāng)異常發(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語句分支是從上到下依次找對應(yīng)類型的,但是注意catch捕獲的異常類型中父類型必須寫在子類型的后面。

finally語句塊是無論異常是否產(chǎn)生都會執(zhí)行的。常用與資源的釋放。

throw 與 throws

  • throws是異常處理機(jī)制的一種,而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("--------------");
        }
    }
}

三、自定義異常

運(yùn)行時異常

繼承 RutimeException

示例:

public class MyRutimeException extends RutimeException {
    public MyRutimeException(String message){
        super(message);
    }
}

編譯時異常

繼承Exception

示例:

public class MyException extends Exception {
    public MyException(String message){
        super(message);
    }
}

總結(jié)

本篇文章就到這里了,希望對你有所幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • SpringBoot 實(shí)現(xiàn)定時任務(wù)的方法詳解

    SpringBoot 實(shí)現(xiàn)定時任務(wù)的方法詳解

    這篇文章主要介紹了SpringBoot 實(shí)現(xiàn)定時任務(wù)的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Spring Boot項(xiàng)目利用Redis實(shí)現(xiàn)session管理實(shí)例

    Spring Boot項(xiàng)目利用Redis實(shí)現(xiàn)session管理實(shí)例

    本篇文章主要介紹了Spring Boot項(xiàng)目利用Redis實(shí)現(xiàn)session管理實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 針對Dubbo接口Mock的解決方案詳解

    針對Dubbo接口Mock的解決方案詳解

    這篇文章主要為大家介紹了針對Dubbo接口Mock的解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 運(yùn)行時常量池和字符串常量池的區(qū)別及說明

    運(yùn)行時常量池和字符串常量池的區(qū)別及說明

    這篇文章主要介紹了運(yùn)行時常量池和字符串常量池的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 五種單件模式之Singleton的實(shí)現(xiàn)方法詳解

    五種單件模式之Singleton的實(shí)現(xiàn)方法詳解

    本篇文章是對Singleton的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Java SpringMVC的自定義異常類

    Java SpringMVC的自定義異常類

    這篇文章主要為大家詳細(xì)介紹了SpringMVC的自定義異常類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • mybatis-plus 版本不兼容問題的解決

    mybatis-plus 版本不兼容問題的解決

    這篇文章主要介紹了mybatis-plus 版本不兼容問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring Boot打war包的實(shí)例教程

    Spring Boot打war包的實(shí)例教程

    本篇文章主要介紹了Spring Boot打war包的實(shí)例教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 淺談java多線程wait,notify

    淺談java多線程wait,notify

    這篇文章主要介紹了java多線程wait,notify,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面小編和大家一起來學(xué)習(xí)一下吧
    2019-05-05
  • SpringBoot基于Minio實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    SpringBoot基于Minio實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    本文主要介紹了SpringBoot基于Minio實(shí)現(xiàn)分片上傳、斷點(diǎn)續(xù)傳的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評論