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

Java異常分類(lèi)以及幾種處理機(jī)制分析講解

 更新時(shí)間:2024年07月27日 09:55:43   作者:mb669d1092c16ee  
在Java的廣闊宇宙中,有一群特殊的“超級(jí)英雄”,它們?cè)诖a世界中穿梭,守護(hù)著程序的正常運(yùn)行——它們就是“異?!?這些英雄們,各司其職,保護(hù)著程序免受錯(cuò)誤的侵?jǐn)_,今天,我們將深入這個(gè)神秘的世界,全面解析異常的分類(lèi),掌握異常的處理機(jī)制

在Java的廣闊宇宙中,有一群特殊的“超級(jí)英雄”,它們?cè)诖a世界中穿梭,守護(hù)著程序的正常運(yùn)行——它們就是“異常”。這些英雄們,各司其職,保護(hù)著程序免受錯(cuò)誤的侵?jǐn)_。今天,我們將深入這個(gè)神秘的世界,全面解析異常的分類(lèi),掌握異常的處理機(jī)制,并通過(guò)豐富的案例,讓每一位開(kāi)發(fā)者都能成為駕馭異常的高手!

一、初識(shí)異常家族

在Java中,異常分為兩大類(lèi):受檢異常(Checked Exceptions)和非受檢異常(Unchecked Exceptions)。

  • 受檢異常:這類(lèi)異常通常是由程序外部因素導(dǎo)致的,如文件讀寫(xiě)錯(cuò)誤、網(wǎng)絡(luò)連接失敗等。Java編譯器要求我們必須處理或聲明拋出這些異常,以確保程序的健壯性。例如,IOException就是一個(gè)典型的受檢異常。
public void readFile(String filename) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }
}
  • 非受檢異常:又稱(chēng)為運(yùn)行時(shí)異常(Runtime Exceptions),通常是由于編程錯(cuò)誤引起的,如數(shù)組越界、空指針引用等。編譯器不會(huì)強(qiáng)制要求我們處理這類(lèi)異常,但它們往往揭示了代碼中的邏輯錯(cuò)誤。例如,NullPointerException就是常見(jiàn)的非受檢異常。
public void printArray(int[] arr) {
    for (int i = 0; i <= arr.length; i++) { // 注意這里的邏輯錯(cuò)誤
        System.out.println(arr[i]);
    }
}

二、異常處理機(jī)制:Java中的防御工事

Java提供了強(qiáng)大的異常處理機(jī)制,主要包括try、catch、finally以及throw和throws關(guān)鍵字,它們構(gòu)成了防御異常的堅(jiān)實(shí)堡壘。

  • try-catch塊:這是最基本的異常處理結(jié)構(gòu)。任何可能拋出異常的代碼都被包裹在try塊中,而catch塊則用于捕獲并處理try塊中拋出的異常。
public void readFile(String filename) {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        System.err.println("文件讀取錯(cuò)誤:" + e.getMessage());
    }
}
  • finally塊:無(wú)論是否發(fā)生異常,finally塊中的代碼都會(huì)被執(zhí)行。這常用于釋放資源,如關(guān)閉文件流、數(shù)據(jù)庫(kù)連接等。
public void readFile(String filename) {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(filename));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        System.err.println("文件讀取錯(cuò)誤:" + e.getMessage());
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                System.err.println("關(guān)閉文件流時(shí)發(fā)生錯(cuò)誤:" + e.getMessage());
            }
        }
    }
}
  • throws關(guān)鍵字:如果方法內(nèi)部無(wú)法處理異常,可以使用throws關(guān)鍵字將異常拋給調(diào)用者,由調(diào)用者決定如何處理。
public void readFile(String filename) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}
  • throw關(guān)鍵字:用于手動(dòng)拋出異常,常用于自定義異常情況。
public void validateAge(int age) throws IllegalArgumentException {
    if (age < 0) {
        throw new IllegalArgumentException("年齡不能為負(fù)數(shù)!");
    }
}

三、自定義異常:打造專(zhuān)屬英雄

Java允許我們創(chuàng)建自己的異常類(lèi)型,這不僅可以讓異常信息更加明確,也能使異常處理更加精細(xì)。

public class NegativeAgeException extends IllegalArgumentException {
    public NegativeAgeException(String message) {
        super(message);
    }
}

public class Person {
    private int age;

    public Person(int age) throws NegativeAgeException {
        if (age < 0) {
            throw new NegativeAgeException("年齡不能為負(fù)數(shù)!");
        }
        this.age = age;
    }
}

四、異常與日志記錄

在實(shí)際開(kāi)發(fā)中,異常處理往往需要與日志記錄相結(jié)合,以便于問(wèn)題追蹤和分析。合理的日志記錄策略可以幫助快速定位問(wèn)題源頭,尤其是在生產(chǎn)環(huán)境中。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggerExample {
    private static final Logger logger = LoggerFactory.getLogger(LoggerExample.class);

    public void readFile(String filename) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filename));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            logger.error("文件讀取錯(cuò)誤:{}", e.getMessage(), e);
        }
    }
}

在上述例子中,我們使用了SLF4J作為日志框架,當(dāng)異常發(fā)生時(shí),不僅打印錯(cuò)誤消息,還附帶了完整的堆棧信息,這對(duì)于后續(xù)的故障排查非常有幫助。

到此這篇關(guān)于Java異常分類(lèi)以及幾種處理機(jī)制分析講解的文章就介紹到這了,更多相關(guān)Java異常的分類(lèi)與處理機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java注解教程及自定義注解

    詳解Java注解教程及自定義注解

    這篇文章主要為大家詳細(xì)介紹了Java注解教程及自定義注解,幫助大家更好地學(xué)習(xí)Java注解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java使用get請(qǐng)求接收List集合數(shù)據(jù)(json)并導(dǎo)出報(bào)表問(wèn)題

    Java使用get請(qǐng)求接收List集合數(shù)據(jù)(json)并導(dǎo)出報(bào)表問(wèn)題

    這篇文章主要介紹了Java使用get請(qǐng)求接收List集合數(shù)據(jù)(json)并導(dǎo)出報(bào)表問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 解決MybatisPlus批量插入數(shù)據(jù)報(bào)錯(cuò):Error getting generated key or setting result to parameter object問(wèn)題

    解決MybatisPlus批量插入數(shù)據(jù)報(bào)錯(cuò):Error getting generated 

    在使用MybatisPlus進(jìn)行批量插入數(shù)據(jù)時(shí)遇到空指針異常錯(cuò)誤,分析原因是由于主鍵生成策略導(dǎo)致的,嘗試通過(guò)設(shè)置useGeneratedKeys屬性解決問(wèn)題,但因批量插入方法限制,該方法未能成功,最終通過(guò)自定義mapper方法實(shí)現(xiàn)批量插入,解決了問(wèn)題
    2024-09-09
  • feignclient?https?接口調(diào)用報(bào)證書(shū)錯(cuò)誤的解決方案

    feignclient?https?接口調(diào)用報(bào)證書(shū)錯(cuò)誤的解決方案

    這篇文章主要介紹了feignclient?https?接口調(diào)用報(bào)證書(shū)錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 用SpringBoot框架來(lái)接收multipart/form-data文件方式

    用SpringBoot框架來(lái)接收multipart/form-data文件方式

    這篇文章主要介紹了用SpringBoot框架來(lái)接收multipart/form-data文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包

    詳解Java如何優(yōu)雅的調(diào)用dubbo同時(shí)不使用其它jar包

    這篇文章主要介紹了如何在不使用他人jar包的情況下優(yōu)雅的進(jìn)行dubbo調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • Mybatis攔截器如何實(shí)現(xiàn)數(shù)據(jù)權(quán)限過(guò)濾

    Mybatis攔截器如何實(shí)現(xiàn)數(shù)據(jù)權(quán)限過(guò)濾

    本文介紹了MyBatis攔截器的使用,通過(guò)實(shí)現(xiàn)Interceptor接口對(duì)SQL進(jìn)行處理,實(shí)現(xiàn)數(shù)據(jù)權(quán)限過(guò)濾功能,通過(guò)在本地線(xiàn)程變量中存儲(chǔ)數(shù)據(jù)權(quán)限相關(guān)信息,并在攔截器的intercept方法中進(jìn)行SQL增強(qiáng)處理
    2024-12-12
  • spring?IOC控制反轉(zhuǎn)原理詳解

    spring?IOC控制反轉(zhuǎn)原理詳解

    這篇文章主要為大家詳細(xì)介紹了spring?IOC控制反轉(zhuǎn)原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類(lèi)型請(qǐng)求參數(shù)內(nèi)容

    Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類(lèi)型請(qǐng)求參數(shù)內(nèi)容

    在Springboot中創(chuàng)建過(guò)濾器,用來(lái)過(guò)濾所有POST類(lèi)型請(qǐng)求并獲取body中的參數(shù)進(jìn)行校驗(yàn)內(nèi)容是否合法,該方法僅適用于POST類(lèi)型請(qǐng)求,本文給大家介紹Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類(lèi)型請(qǐng)求參數(shù)內(nèi)容,感興趣的朋友一起看看吧
    2023-08-08
  • springboot中如何通過(guò)cors協(xié)議解決跨域問(wèn)題

    springboot中如何通過(guò)cors協(xié)議解決跨域問(wèn)題

    這篇文章主要介紹了springboot中通過(guò)cors協(xié)議解決跨域問(wèn)題,cors是一個(gè)w3c標(biāo)準(zhǔn),它允許瀏覽器(目前ie8以下還不能被支持)像我們不同源的服務(wù)器發(fā)出xmlHttpRequest請(qǐng)求,我們可以繼續(xù)使用ajax進(jìn)行請(qǐng)求訪(fǎng)問(wèn)。具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05

最新評(píng)論