亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java異常架構(gòu)Exception(異常)詳解

 更新時(shí)間:2025年03月28日 15:33:33   作者:Flying_Fish_Xuan  
這篇文章主要介紹了Java異常架構(gòu)Exception(異常),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1. Exception 類的概述

在Java中,Exception類是Throwable類的直接子類之一。

Throwable類是Java異常處理體系的根類,所有異常和錯(cuò)誤都繼承自它。

Java的異常體系可以分為以下幾個(gè)部分:

  • Throwable:所有異常和錯(cuò)誤的基類。
  • Exception:程序可能捕獲并處理的異常。
  • 受檢異常(Checked Exception):必須顯式捕獲或聲明拋出的異常。
  • 非受檢異常(Unchecked Exception):包括運(yùn)行時(shí)異常(RuntimeException)及其子類,不強(qiáng)制要求捕獲或聲明。
  • Error:由JVM生成的嚴(yán)重錯(cuò)誤,通常不可恢復(fù)。

Exception的分類

Exception類進(jìn)一步分為兩大類:

受檢異常(Checked Exception)

  • 必須在代碼中顯式地捕獲或聲明拋出的異常。
  • 通常用于描述程序與外部資源(如文件、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)等)之間的交互中可能出現(xiàn)的異常情況。
  • 常見的受檢異常包括IOExceptionSQLException、ClassNotFoundException等。

非受檢異常(Unchecked Exception)

  • 繼承自RuntimeException類,編譯器不強(qiáng)制要求捕獲或聲明。
  • 通常用于描述編程錯(cuò)誤,如邏輯錯(cuò)誤、非法參數(shù)等。
  • 常見的非受檢異常包括NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException等。

2. 受檢異常(Checked Exception)

受檢異常是指在編譯期間由編譯器檢查的異常。

在Java中,如果某個(gè)方法可能會(huì)拋出受檢異常,必須在方法聲明中通過(guò)throws關(guān)鍵字顯式聲明,或者在方法內(nèi)部通過(guò)try-catch塊進(jìn)行捕獲處理。

受檢異常的常見子類

  • IOException:表示在進(jìn)行輸入輸出操作時(shí)發(fā)生的異常,常用于處理文件操作、網(wǎng)絡(luò)通信等。
java public void readFile(String fileName) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(fileName)); String line = reader.readLine(); reader.close(); }
  • SQLException:表示在訪問(wèn)數(shù)據(jù)庫(kù)時(shí)發(fā)生的異常,通常在執(zhí)行SQL語(yǔ)句時(shí)出現(xiàn)。
java public void executeQuery(String query) throws SQLException { Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "user", "password"); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(query); // 處理結(jié)果集 rs.close(); stmt.close(); connection.close(); }
  • ClassNotFoundException:表示嘗試加載某個(gè)類時(shí),該類未找到的異常。通常出現(xiàn)在使用Class.forName方法時(shí)。
java public void loadClass(String className) throws ClassNotFoundException { Class<?> clazz = Class.forName(className); }

受檢異常的處理

受檢異常必須通過(guò)try-catch塊捕獲處理,或者在方法簽名中使用throws關(guān)鍵字聲明拋出。

public void processFile(String fileName) {
    try {
        readFile(fileName);
    } catch (IOException e) {
        e.printStackTrace();
        // 處理異常,例如通知用戶或記錄日志
    }
}

在這種情況下,readFile方法聲明拋出IOException,因此調(diào)用該方法的processFile方法必須捕獲或聲明處理此異常。

3. 非受檢異常(Unchecked Exception)

非受檢異常是指不需要在代碼中顯式捕獲或聲明的異常。

這類異常繼承自RuntimeException,通常由程序中的邏輯錯(cuò)誤或不合理的操作引發(fā)。

非受檢異常的常見子類

  • NullPointerException:表示程序試圖訪問(wèn)空引用對(duì)象的異常。這是Java中最常見的運(yùn)行時(shí)異常之一。
java public void printLength(String str) { System.out.println(str.length()); // 如果str為null,會(huì)拋出NullPointerException }
  • ArrayIndexOutOfBoundsException:表示訪問(wèn)數(shù)組時(shí),索引越界的異常。
java public void printArrayElement(int[] arr, int index) { System.out.println(arr[index]); // 如果index超出數(shù)組長(zhǎng)度,會(huì)拋出ArrayIndexOutOfBoundsException }
  • IllegalArgumentException:表示方法接收到非法參數(shù)時(shí)拋出的異常。通常用于在方法開始時(shí)驗(yàn)證參數(shù)的合法性。
java public void setAge(int age) { if (age < 0) { throw new IllegalArgumentException("Age cannot be negative"); } this.age = age; }

非受檢異常的處理

雖然編譯器不強(qiáng)制要求處理非受檢異常,但開發(fā)者仍應(yīng)通過(guò)適當(dāng)?shù)姆绞教幚磉@些異常,以提高代碼的健壯性。

public void processInput(String input) {
    try {
        System.out.println(input.length());
    } catch (NullPointerException e) {
        System.out.println("Input cannot be null");
    }
}

通過(guò)捕獲NullPointerException,程序可以在空輸入的情況下給予用戶適當(dāng)?shù)奶崾荆皇侵苯颖罎ⅰ?/p>

4. 自定義異常

Java允許開發(fā)者根據(jù)需求創(chuàng)建自定義異常。

自定義異常通常繼承自ExceptionRuntimeException,并可以添加額外的信息或行為。

自定義受檢異常

如果你希望創(chuàng)建一個(gè)必須顯式捕獲或聲明的異常,可以繼承Exception類。

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

    public InvalidUserInputException(String message, Throwable cause) {
        super(message, cause);
    }
}

使用自定義異常:

public void processUserInput(String input) throws InvalidUserInputException {
    if (input == null || input.isEmpty()) {
        throw new InvalidUserInputException("User input cannot be null or empty");
    }
    // 處理輸入
}

自定義非受檢異常

如果你希望創(chuàng)建一個(gè)不強(qiáng)制要求捕獲的異常,可以繼承RuntimeException。

public class InvalidConfigurationException extends RuntimeException {
    public InvalidConfigurationException(String message) {
        super(message);
    }

    public InvalidConfigurationException(String message, Throwable cause) {
        super(message, cause);
    }
}

使用自定義異常:

public void configure(String config) {
    if (config == null) {
        throw new InvalidConfigurationException("Configuration cannot be null");
    }
    // 配置操作
}

5. 異常處理的最佳實(shí)踐

在處理異常時(shí),開發(fā)者應(yīng)遵循一些最佳實(shí)踐,以確保代碼的可讀性、健壯性和維護(hù)性。

  • 選擇合適的異常類型:根據(jù)異常的性質(zhì)選擇適當(dāng)?shù)漠惓n愋?。?duì)于可預(yù)見且需要強(qiáng)制處理的異常,使用受檢異常;對(duì)于編程錯(cuò)誤或非法操作,使用非受檢異常。
  • 避免通配符捕獲:盡量避免使用catch (Exception e)catch (Throwable t)的通配符捕獲方式,這會(huì)捕獲所有類型的異常,可能隱藏潛在的問(wèn)題。
  • 清晰的異常信息:在拋出異常時(shí),提供有意義的異常信息,以幫助調(diào)試和定位問(wèn)題。
  • 不要忽略異常:捕獲異常后不要簡(jiǎn)單地忽略它們,應(yīng)該采取適當(dāng)?shù)奶幚泶胧缬涗浫罩?、通知用戶或進(jìn)行相應(yīng)的補(bǔ)救措施。
  • 合理使用finally塊finally塊用于清理資源(如關(guān)閉文件、網(wǎng)絡(luò)連接等),確保無(wú)論是否發(fā)生異常,資源都能得到正確釋放。Java 7及以后版本還可以使用try-with-resources語(yǔ)法自動(dòng)管理資源。

6. 總結(jié)

Java的Exception類及其子類構(gòu)成了Java異常處理的基礎(chǔ)架構(gòu)。通過(guò)了解受檢異常和非受檢異常的區(qū)別及其使用場(chǎng)景,開發(fā)者可以編寫更健壯的代碼,確保程序在異常情況下能夠正確處理并恢復(fù)。

自定義異常允許開發(fā)者根據(jù)業(yè)務(wù)需求創(chuàng)建更加符合場(chǎng)景的異常類型,提升代碼的可讀性和可維護(hù)性。在實(shí)際開發(fā)中,合理處理異常不僅能提高程序的穩(wěn)定性,還能增強(qiáng)用戶體驗(yàn)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在安卓系統(tǒng)中插入表情到光標(biāo)位置的代碼詳解

    在安卓系統(tǒng)中插入表情到光標(biāo)位置的代碼詳解

    這篇文章主要介紹了在安卓系統(tǒng)中插入表情到光標(biāo)位置的代碼詳解,利用Java代碼在EditText控件中實(shí)現(xiàn),需要的朋友可以參考下
    2015-07-07
  • sun?unsafe類功能及使用注意事項(xiàng)詳解

    sun?unsafe類功能及使用注意事項(xiàng)詳解

    這篇文章主要為大家介紹了unsafe類的功能及在使用中需要注意的事項(xiàng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-01-01
  • java如何用遞歸生成樹形結(jié)構(gòu)

    java如何用遞歸生成樹形結(jié)構(gòu)

    作者分享了自己在使用腳本之家資源進(jìn)行編程時(shí)的經(jīng)驗(yàn),包括準(zhǔn)備實(shí)體對(duì)象、測(cè)試數(shù)據(jù)、構(gòu)造樹形結(jié)構(gòu)遞歸函數(shù)、測(cè)試以及輸出結(jié)果等步驟,作者希望這些經(jīng)驗(yàn)?zāi)軐?duì)大家有所幫助,并鼓勵(lì)大家支持腳本之家
    2025-03-03
  • Java正則表達(dá)式之split()方法實(shí)例詳解

    Java正則表達(dá)式之split()方法實(shí)例詳解

    這篇文章主要介紹了Java正則表達(dá)式之split()方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了split方法的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-03-03
  • Spring Cloud Hystrix異常處理方法詳解

    Spring Cloud Hystrix異常處理方法詳解

    這篇文章主要介紹了Spring Cloud Hystrix異常處理方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • java實(shí)現(xiàn)LRU緩存淘汰算法的方法

    java實(shí)現(xiàn)LRU緩存淘汰算法的方法

    LRU(Least recently used,最近最少使用)算法根據(jù)數(shù)據(jù)的歷史訪問(wèn)記錄來(lái)進(jìn)行淘汰數(shù)據(jù),其核心思想是“如果數(shù)據(jù)最近被訪問(wèn)過(guò),那么將來(lái)被訪問(wèn)的幾率也更高”。下面看下java實(shí)現(xiàn)LRU緩存淘汰算法的方法,一起看看吧
    2021-11-11
  • SpringBoot請(qǐng)求響應(yīng)方式示例詳解

    SpringBoot請(qǐng)求響應(yīng)方式示例詳解

    這篇文章主要介紹了SpringBoot請(qǐng)求響應(yīng)的相關(guān)操作,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Java ClassLoader類加載器基礎(chǔ)詳解

    Java ClassLoader類加載器基礎(chǔ)詳解

    這篇文章主要為大家介紹了Java ClassLoader類加載器基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java基于API接口爬取商品數(shù)據(jù)的示例代碼

    Java基于API接口爬取商品數(shù)據(jù)的示例代碼

    Java作為一種流行的編程語(yǔ)言,可以用于編寫程序來(lái)調(diào)用這些API接口,從而獲取商品數(shù)據(jù),本文將介紹如何使用Java基于API接口爬取商品數(shù)據(jù),包括請(qǐng)求API、解析JSON數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)等步驟,并提供相應(yīng)的代碼示例,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 五分鐘手?jǐn)]一個(gè)Spring容器(萌芽版)

    五分鐘手?jǐn)]一個(gè)Spring容器(萌芽版)

    Spring的兩大內(nèi)核分別是IOC和AOP,其中最最核心的是IOC。這篇文章主要介紹了五分鐘,手?jǐn)]一個(gè)Spring容器的相關(guān)知識(shí),需要的朋友可以參考下
    2022-03-03

最新評(píng)論