JAVA异常和自定义异常处理方式

 更新时间:2023年09月21日 14:53:55   作者:珍爱生命远离IT!  
这篇文章主要介绍了JAVA异常和自定义异常处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

废话前言

作为一个码农想必对异常这一块滴已经是相当熟悉了就是我们常说的try/catch/finally吗,然后抛出捕获的异常信息,那么当我们在开发中有些异常需要我们给出特定的提示统一对异常进行处理展示可能就会用到自定义异常。

第一:先说一下平时常用常见的异常

(1)运行时异常(checked exception)

继承自java.lang. RuntimeException类

常见5种:

  • ClassCastException(类型转换异常)
  • IndexOutOfBoundsException(数组越界)
  • NullPointerException(空指针)
  • ArrayStoreException(数据存储异常,操作数组时类型不一致)
  • BufferOverflowException(IO操作的异常)

(2)非运行时异常(unchecked exception)

继承自java.lang.Exception类

常见:

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

先给出语法:

try{
//try块中放可能发生异常的代码。
//如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。
//如果发生异常,则尝试去匹配catch块。
}catch(SQLException SQLexception){
//每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
//catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
//在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
//如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。
//如果try中没有发生异常,则所有的catch块将被忽略。
}catch(Exception exception){
//…
}finally{
//finally块通常是可选的。
//无论异常是否发生,异常是否匹配被处理,finally都会执行。
//一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
//finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
}

在这里插入图片描述

代码例子:

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调用方法还会停止向下运行,并被调用方法接住并抛出
		}finally {
			System.out.println("finally");
		}
		return null;
	}
}

在这里插入图片描述

第二:说一下我用到的自定义异常

自定义异常的好处是什么?

(1)统一了对外异常展示的方式给前台或者各个服务接口

(2)使用自定义异常继承相关的异常来抛出处理后的异常信息可以隐藏底层的异常,这样更安全,异常信息也更加的直观

我是如何在项目中使用的场景?

直接上代码

一:自定义异常类

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

二:自定义异常处理类

@RestControllerAdvice
public class MyExceptionHandler {
    @ExceptionHandler(ExceptionMessage.class)
    public String handlerMyException(ExceptionMessage ex) {
    //BaseRspsMsg自定义错误代码
    BaseRspsMsg baseRspsMsg = 	BaseRspsMsg.build(BaseRspsMsg.BIZ_CODE_00001_FAILE,ex.getMessage());
        return baseRspsMsg.toJsonStr();
    }
}

三:代码调用

boolean isTrue = 处理逻辑是否符合;

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java+Selenium实现控制浏览器的启动选项Options

    Java+Selenium实现控制浏览器的启动选项Options

    这篇文章主要为大家详细介绍了如何使用java代码利用selenium控制浏览器的启动选项Options的代码操作,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-01-01
  • 一文带你搞懂Maven的继承与聚合

    一文带你搞懂Maven的继承与聚合

    这篇文章主要为大家详细介绍了Maven的继承和聚合以及二者的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-07-07
  • SpringBoot 统一公共返回类的实现

    SpringBoot 统一公共返回类的实现

    本文主要介绍了SpringBoot 统一公共返回类的实现,配置后台的统一公共返回类,这样做目的是为了统一返回信息,文中示例代码介绍的很详细,感兴趣的可以了解一下
    2022-01-01
  • Java数据结构与算法学习之双向链表

    Java数据结构与算法学习之双向链表

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。本文将为大家详细介绍双向链表的特点与使用,需要的可以参考一下
    2021-12-12
  • Java中的@SneakyThrows注解详解

    Java中的@SneakyThrows注解详解

    这篇文章主要介绍了Java中的@SneakyThrows注解详解,@SneakyThrows将当前方法抛出的异常,包装成RuntimeException,骗过编译器,使得调用点可以不用显示处理异常信息,需要的朋友可以参考下
    2023-10-10
  • java 数据库连接与增删改查操作实例详解

    java 数据库连接与增删改查操作实例详解

    这篇文章主要介绍了java 数据库连接与增删改查操作,结合实例形式详细分析了java使用jdbc进行数据库连接及增删改查等相关操作实现技巧与注意事项,需要的朋友可以参考下
    2019-11-11
  • Spring Boot如何利用拦截器加缓存完成接口防刷操作

    Spring Boot如何利用拦截器加缓存完成接口防刷操作

    流的需求出现在许多常见的场景中,下面这篇文章主要给大家介绍了关于Spring Boot如何利用拦截器加缓存完成接口防刷操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • java Spring Boot 配置redis pom文件操作

    java Spring Boot 配置redis pom文件操作

    这篇文章主要介绍了java Spring Boot 配置redis pom文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Maven中jar包冲突原理与解决办法

    Maven中jar包冲突原理与解决办法

    这篇文章主要介绍了Maven中jar包冲突原理与解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 梳理总结Java static关键字的方法作用

    梳理总结Java static关键字的方法作用

    这篇文章主要介绍了梳理总结Java static关键字的方法作用, static 关键字可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的
    2022-06-06

最新评论