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

JAVA異常和自定義異常處理方式

 更新時(shí)間:2023年09月21日 14:53:55   作者:珍愛(ài)生命遠(yuǎn)離IT!  
這篇文章主要介紹了JAVA異常和自定義異常處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

廢話(huà)前言

作為一個(gè)碼農(nóng)想必對(duì)異常這一塊滴已經(jīng)是相當(dāng)熟悉了就是我們常說(shuō)的try/catch/finally嗎,然后拋出捕獲的異常信息,那么當(dāng)我們?cè)陂_(kāi)發(fā)中有些異常需要我們給出特定的提示統(tǒng)一對(duì)異常進(jìn)行處理展示可能就會(huì)用到自定義異常。

第一:先說(shuō)一下平時(shí)常用常見(jiàn)的異常

(1)運(yùn)行時(shí)異常(checked exception)

繼承自java.lang. RuntimeException類(lèi)

常見(jiàn)5種:

  • ClassCastException(類(lèi)型轉(zhuǎn)換異常)
  • IndexOutOfBoundsException(數(shù)組越界)
  • NullPointerException(空指針)
  • ArrayStoreException(數(shù)據(jù)存儲(chǔ)異常,操作數(shù)組時(shí)類(lèi)型不一致)
  • BufferOverflowException(IO操作的異常)

(2)非運(yùn)行時(shí)異常(unchecked exception)

繼承自java.lang.Exception類(lèi)

常見(jiàn):

Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException

先給出語(yǔ)法:

try{
//try塊中放可能發(fā)生異常的代碼。
//如果執(zhí)行完try且不發(fā)生異常,則接著去執(zhí)行finally塊和finally后面的代碼(如果有的話(huà))。
//如果發(fā)生異常,則嘗試去匹配catch塊。
}catch(SQLException SQLexception){
//每一個(gè)catch塊用于捕獲并處理一個(gè)特定的異常,或者這異常類(lèi)型的子類(lèi)。Java7中可以將多個(gè)異常聲明在一個(gè)catch中。
//catch后面的括號(hào)定義了異常類(lèi)型和異常參數(shù)。如果異常與之匹配且是最先匹配到的,則虛擬機(jī)將使用這個(gè)catch塊來(lái)處理異常。
//在catch塊中可以使用這個(gè)塊的異常參數(shù)來(lái)獲取異常的相關(guān)信息。異常參數(shù)是這個(gè)catch塊中的局部變量,其它塊不能訪(fǎng)問(wèn)。
//如果當(dāng)前try塊中發(fā)生的異常在后續(xù)的所有catch中都沒(méi)捕獲到,則先去執(zhí)行finally,然后到這個(gè)函數(shù)的外部caller中去匹配異常處理器。
//如果try中沒(méi)有發(fā)生異常,則所有的catch塊將被忽略。
}catch(Exception exception){
//…
}finally{
//finally塊通常是可選的。
//無(wú)論異常是否發(fā)生,異常是否匹配被處理,finally都會(huì)執(zhí)行。
//一個(gè)try至少要有一個(gè)catch塊,否則, 至少要有1個(gè)finally塊。但是finally不是用來(lái)處理異常的,finally不會(huì)捕獲異常。
//finally主要做一些清理工作,如流的關(guān)閉,數(shù)據(jù)庫(kù)連接的關(guān)閉等。
}

在這里插入圖片描述

代碼例子:

public class Class1 {
	public static void main(String[] args) throws Exception {
		try {
			List<String> list = new ArrayList<String>();
			Class2 c = new Class2();
			c.aa(list);
			System.out.println("打印");
		}catch(Exception e) {
			System.out.println(">>>>>>>>>>>main");
			e.printStackTrace();
		}finally {
			System.out.println("main finally");
		}
	}
}
public class Class2 {
	public String aa(List<String> list) throws Exception{
		try {
			list.get(10);
		}catch(Exception e) {
			System.out.println(">>>>>>class2 aa="+e.getMessage());
			e.printStackTrace();
			throw e; //必須throw調(diào)用方法還會(huì)停止向下運(yùn)行,并被調(diào)用方法接住并拋出
		}finally {
			System.out.println("finally");
		}
		return null;
	}
}

在這里插入圖片描述

第二:說(shuō)一下我用到的自定義異常

自定義異常的好處是什么?

(1)統(tǒng)一了對(duì)外異常展示的方式給前臺(tái)或者各個(gè)服務(wù)接口

(2)使用自定義異常繼承相關(guān)的異常來(lái)拋出處理后的異常信息可以隱藏底層的異常,這樣更安全,異常信息也更加的直觀(guān)

我是如何在項(xiàng)目中使用的場(chǎng)景?

直接上代碼

一:自定義異常類(lèi)

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

二:自定義異常處理類(lèi)

@RestControllerAdvice
public class MyExceptionHandler {
    @ExceptionHandler(ExceptionMessage.class)
    public String handlerMyException(ExceptionMessage ex) {
    //BaseRspsMsg自定義錯(cuò)誤代碼
    BaseRspsMsg baseRspsMsg = 	BaseRspsMsg.build(BaseRspsMsg.BIZ_CODE_00001_FAILE,ex.getMessage());
        return baseRspsMsg.toJsonStr();
    }
}

三:代碼調(diào)用

boolean isTrue = 處理邏輯是否符合;

if (!isTrue) {
	errDesc = "ERROR_異常信息描述!" ;
	throw new ExceptionMessage(errDesc);
}

總結(jié)

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

相關(guān)文章

  • 詳解Spring依賴(lài)注入的三種方式以及優(yōu)缺點(diǎn)

    詳解Spring依賴(lài)注入的三種方式以及優(yōu)缺點(diǎn)

    IoC?和?DI?是?Spring?中最重要的兩個(gè)概念,其中?IoC(Inversion?of?Control)為控制反轉(zhuǎn)的思想,而?DI(Dependency?Injection)依賴(lài)注入為其(IoC)具體實(shí)現(xiàn)。那么?DI?實(shí)現(xiàn)依賴(lài)注入的方式有幾種?這些注入方式又有什么不同?本文就來(lái)和大家一起詳細(xì)聊聊
    2022-08-08
  • Flowable流程引擎API與服務(wù)

    Flowable流程引擎API與服務(wù)

    這篇文章主要介紹了Flowable流程引擎API與服務(wù),引擎API是與Flowable交互的最常用手段,總?cè)肟邳c(diǎn)是ProcessEngine,使用ProcessEngine,可以獲得各種提供工作流或BPM方法的服務(wù),下面我們來(lái)詳細(xì)了解
    2023-10-10
  • log4j與slf4j的使用與區(qū)別詳解

    log4j與slf4j的使用與區(qū)別詳解

    這篇文章主要介紹了log4j與slf4j的使用與區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java使用反射獲取字段屬性

    Java使用反射獲取字段屬性

    這篇文章主要為大家詳細(xì)介紹了Java如何利用反射實(shí)現(xiàn)獲取字段屬性值,文中的示例代碼講解詳細(xì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2023-06-06
  • 深入分析JAVA 反射和泛型

    深入分析JAVA 反射和泛型

    這篇文章主要介紹了JAVA 反射和泛型的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • j2Cache線(xiàn)上異常排查問(wèn)題解決記錄分析

    j2Cache線(xiàn)上異常排查問(wèn)題解決記錄分析

    這篇文章主要為大家介紹了關(guān)于j2Cache線(xiàn)上異常排查的問(wèn)題解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 解析Spring Cloud Bus消息總線(xiàn)

    解析Spring Cloud Bus消息總線(xiàn)

    這篇文章主要介紹了Spring Cloud Bus消息總線(xiàn)的介紹及使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Spring?Data?JPA命名約定查詢(xún)實(shí)現(xiàn)方法

    Spring?Data?JPA命名約定查詢(xún)實(shí)現(xiàn)方法

    這篇文章主要為大家介紹了Spring?Data?JPA命名約定查詢(xún)實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 詳解Java如何實(shí)現(xiàn)有效的并發(fā)處理

    詳解Java如何實(shí)現(xiàn)有效的并發(fā)處理

    隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,現(xiàn)代軟件系統(tǒng)對(duì)于并發(fā)性能的要求越來(lái)越高,如何學(xué)習(xí)和掌握并發(fā)編程技術(shù)成為了Java開(kāi)發(fā)人員必備的技能之一,本文主要介紹了Java并發(fā)編程的相關(guān)概念、原理和實(shí)踐技巧,感興趣的可以了解下
    2023-11-11
  • Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì)

    Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì)

    本文主要介紹了Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì),使用Collections類(lèi)配合HashMap來(lái)統(tǒng)計(jì)和java lamb 計(jì)算這兩種方式,具有一定的參考價(jià)值,感興趣可以了解一下
    2024-02-02

最新評(píng)論