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

JAVA中try-catch結(jié)構(gòu)之異常處理的使用方法

 更新時間:2024年09月01日 08:37:49   作者:非非從零學(xué)IT  
Java編程中一個非常重要且實用的概念,可以幫助我們處理代碼運行時發(fā)生的異常情況,下面這篇文章主要給大家介紹了關(guān)于JAVA中try-catch結(jié)構(gòu)之異常處理的使用方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

try-catch 是 Java 和許多其他編程語言中用于異常處理的關(guān)鍵字組合,它允許程序員優(yōu)雅地捕獲和處理運行時可能出現(xiàn)的錯誤。以下是 try-catch 結(jié)構(gòu)的詳細說明:

結(jié)構(gòu):

try {
    // 有可能拋出異常的代碼塊
    // 這里可以調(diào)用方法、執(zhí)行操作等
    riskyOperation();
} catch (SpecificExceptionType1 e) {
    // 處理 SpecificExceptionType1 類型異常的代碼塊
    // 可以訪問到異常對象 e,通過 e.getMessage(), e.printStackTrace() 等方法獲取異常信息
    System.out.println("Caught Exception Type 1: " + e.getMessage());
} catch (SpecificExceptionType2 e) {
    // 處理 SpecificExceptionType2 類型異常的代碼塊
    System.out.println("Caught Exception Type 2: " + e.getMessage());
} finally {
    // 無論是否發(fā)生異常,都會執(zhí)行的代碼塊
    // 通常用于資源清理,如關(guān)閉文件、數(shù)據(jù)庫連接等
    cleanupResources();
}

解釋:

  • try 塊:包裹可能會拋出異常的代碼。當(dāng) try 塊中的代碼執(zhí)行時,如果出現(xiàn)了異常(例如除數(shù)為零、文件未找到等),控制權(quán)將立即轉(zhuǎn)到相應(yīng)的 catch 塊。

  • catch 塊:每一個 catch 塊都與一個或一類異常類型相關(guān)聯(lián)。當(dāng) try 塊中的代碼拋出與 catch 塊聲明的異常類型相匹配的異常時,與之關(guān)聯(lián)的 catch 塊將被執(zhí)行。在 catch 塊中,可以訪問到異常對象,進而獲取異常的詳細信息。

  • finally 塊(可選):無論 try 塊中是否拋出了異常,以及是否有與之匹配的 catch 塊,finally 塊中的代碼總會被執(zhí)行。通常用于資源回收、關(guān)閉打開的文件、數(shù)據(jù)庫連接等操作,確保無論程序運行結(jié)果如何,都能正確釋放資源。

示例:

try {
    int denominator = 0;
    int result = 10 / denominator; // 這將拋出 ArithmeticException
} catch (ArithmeticException e) {
    System.out.println("Divide by zero error occurred: " + e.getMessage());
} finally {
    System.out.println("Finally block executed.");
}

在這個例子中,嘗試除以零會拋出 ArithmeticException,這個異常會被相應(yīng)的 catch 塊捕獲并處理,然后執(zhí)行 finally 塊中的代碼。

多重捕捉:

在Java中,可以使用多重 catch 子句來捕獲不同類型的異常。這樣,可以根據(jù)異常的不同類型執(zhí)行不同的處理邏輯。下面是一個使用多重 catch 的示例:

try {
    // 可能拋出多種類型異常的代碼
    File file = new File("non_existent_file.txt");
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);
    String line = br.readLine();
} catch (FileNotFoundException e) {
    // 處理找不到文件異常
    System.out.println("File not found: " + e.getMessage());
} catch (IOException e) {
    // 處理讀取文件時發(fā)生的其他IO異常,如讀取錯誤、緩沖區(qū)溢出等
    System.out.println("An IO error occurred: " + e.getMessage());
} finally {
    // 清理資源,如關(guān)閉文件流
    try {
        if (br != null) {
            br.close();
        }
    } catch (IOException ex) {
        System.out.println("Error closing the reader: " + ex.getMessage());
    }
}

在上述代碼中,try 塊中包含了可能導(dǎo)致 FileNotFoundException 和 IOException 的代碼。當(dāng)出現(xiàn) FileNotFoundException 時,第一個 catch 子句會被執(zhí)行;如果發(fā)生了 IOException 但不是 FileNotFoundException(例如讀取過程中出現(xiàn)問題),則第二個 catch 子句會被執(zhí)行。

需要注意的是,Java 7及更高版本引入了一種更簡潔的異常處理方式,即使用一個多異常捕獲的 catch 子句,可以捕獲并處理多種類型的異常,如下所示:

catch (FileNotFoundException | IOException e) {
    System.out.println("An error occurred: " + e.getMessage());
}

這種方式可以合并處理同類或繼承關(guān)系中的多種異常類型。但是,如果需要針對每種異常采取不同的處理措施,還是需要分開使用多個 catch 子句。

附:自定義異常

上面提到:如果拋出異常對象必須是異常類的子類(?throw new String(”ssdf“)),但是現(xiàn)在想自定義一個怎么辦呢?

1、為什么需要自定義異常類

Java中不同的異常類,分別表示著某一種具體的異常情況。那么在開發(fā)中總是有些異常情況是核心類庫中沒有定義好的,此時我們需要根據(jù)自己業(yè)務(wù)的異常情況來定義異常類。例如年齡負數(shù)問題,考試成績負數(shù)問題,某員工已在團隊中等。——可以通過異常名稱就能直接判斷此異常出現(xiàn)的原因,因此有必要不滿指定條件時,通過此異常類判斷出具體的異常問題

2、如何自定義異常類

  • 繼承于現(xiàn)有的異常體系:java.lang.Exception、java.lang.RuntimeException
  • 通常提供幾個重載的構(gòu)造器:無參構(gòu)造、(String message)構(gòu)造器
  • 提供一個全局常量:聲明為static final long serialVersionUID

3、如何使用自定義異常類

  • 在具體代碼中,滿足指定條件的情況下,只能手動使用"throw 自定義異常類的對象"方式,將異常對象拋出【生成異常對象,手動拋】
  • 如果是非運行時異常,必須要處理:try-catch、throws

自定義異常類,并手動拋出異常對象→處理異常

//自定義異常類
class MyException extends Exception {
    static final long serialVersionUID = 23423423435L;
    private int idnumber;
    public MyException(String message, int id) {
        super(message);
        this.idnumber = id;
    }
    public int getId() {
        return idnumber;
    }
}
public class MyExpTest {
    public void regist(int num) throws MyException {
        if (num < 0)
            throw new MyException("人數(shù)為負值,不合理", 3);//手動拋出異常對象
        else
            System.out.println("登記人數(shù)" + num);
    }
    public void manager() {
        try {
            regist(100);//執(zhí)行會產(chǎn)生異常對象的代碼,就需要進行異常處理
        } catch (MyException e) {
            System.out.print("登記失敗,出錯種類" + e.getId());
        }
        System.out.print("本次登記操作結(jié)束");
    }
    public static void main(String args[]) {
        MyExpTest t = new MyExpTest();
        t.manager();
    }
}

總結(jié)

到此這篇關(guān)于JAVA中try-catch結(jié)構(gòu)之異常處理的使用方法的文章就介紹到這了,更多相關(guān)JAVA try-catch異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot框架如何管理Xml和CSV

    SpringBoot框架如何管理Xml和CSV

    XML是可擴展標(biāo)記語言,是一種用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言。CSV是一種通用的、相對簡單的文件格式,通常被用在大數(shù)據(jù)領(lǐng)域,進行大規(guī)模的數(shù)據(jù)搬運操作,本文將介紹SpringBoot框架如何管理Xml和CSV
    2021-06-06
  • 詳解Java中的不可變對象

    詳解Java中的不可變對象

    這篇文章主要介紹了Java中的不可變對象的相關(guān)知識,文中代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以參考下
    2020-06-06
  • Java 中的 print() 和 println()

    Java 中的 print() 和 println()

    這篇文章主要介紹了Java 中的 print() 和 println(),Java 中的 print()和println()方法用于在控制臺上顯示文本,下面來看看它們之間到底有什么區(qū)別吧,需要的朋友也可以參考一下
    2021-11-11
  • JavaWeb中web.xml初始化加載順序詳解

    JavaWeb中web.xml初始化加載順序詳解

    本篇文章主要介紹了JavaWeb中web.xml初始化加載順序詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring AI 使用本地 Ollama Embeddings的操作方法

    Spring AI 使用本地 Ollama Embeddings的操作方法

    使用 OpenAI 的 Embeddings 接口是有費用的,如果想對大量文檔進行測試,使用本地部署的 Embeddings 就能省去大量的費用,所以我們嘗試使用本地的 Ollama Embeddings,這篇文章主要介紹了Spring AI 使用本地 Ollama Embeddings,需要的朋友可以參考下
    2024-05-05
  • Java某個經(jīng)緯度是否在genjson文件中問題

    Java某個經(jīng)緯度是否在genjson文件中問題

    GeoJSON是一種用于地理空間信息數(shù)據(jù)交換的格式,基于JSON,要判斷某個經(jīng)緯度是否在某個區(qū)域內(nèi),首先需要解析GeoJSON文件,確定區(qū)域邊界,然后使用經(jīng)緯度進行比較
    2024-11-11
  • SpringBoot執(zhí)行定時任務(wù)@Scheduled的方法

    SpringBoot執(zhí)行定時任務(wù)@Scheduled的方法

    這篇文章主要介紹了SpringBoot執(zhí)行定時任務(wù)@Scheduled的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • zuulGateway 通過filter統(tǒng)一修改返回值的操作

    zuulGateway 通過filter統(tǒng)一修改返回值的操作

    這篇文章主要介紹了zuulGateway 通過filter統(tǒng)一修改返回值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • JAVA系統(tǒng)中Spring?Boot應(yīng)用程序的配置文件application.yml使用詳解

    JAVA系統(tǒng)中Spring?Boot應(yīng)用程序的配置文件application.yml使用詳解

    這篇文章主要介紹了JAVA系統(tǒng)中Spring?Boot應(yīng)用程序的配置文件application.yml的相關(guān)資料,application.yml是Spring?Boot應(yīng)用程序的配置文件,定義了服務(wù)器、Spring、日志、安全及其他配置屬性,確保應(yīng)用程序正確啟動和運行,需要的朋友可以參考下
    2025-01-01
  • 基于Java實現(xiàn)簡單的時序數(shù)據(jù)壓縮算法

    基于Java實現(xiàn)簡單的時序數(shù)據(jù)壓縮算法

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)簡單易懂的時序數(shù)據(jù)壓縮算法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-06-06

最新評論