如何用SpringBoot优雅地对异常进行统一的捕获和处理呢?

一、 前言

在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服,SpringBoot的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我们需要对这些异常进行统一的捕获并处理。

如果不进行异常处理,当出现错误的时候,返回的信息可能是如下图这样的:

二、异常分类

1. 从定义角度的异常分类

(1). Error(错误)

程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm 虚拟机自身的非正常运行,calss 文件没有主方法。程序本生是不能处理错误的,只能依靠外界干预。Error 是系统内部的错误,由 jvm 抛出,交给系统来处理。

(2). Exception(错误)

是程序正常运行中,可以预料的意外情况。比如数据库连接中断,空指针,数组下标越界。异常出现可以导致程序非正常终止,也可以预先检测,被捕获处理掉,使程序继续运行。 EXCEPTION(异常)按照性质,又分为编译异常(可检测)和运行时异常(不可检测)。

a.编译时异常

又叫可检查异常,通常时由语法错和环境因素(外部资源)造成的异常。比如

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在C#中,异常处理机制用于处理在程序执行过程中可能发生的错误或异常情况。异常是一种表示程序执行期间出现问题的对象,它可以是系统定义的异常类型或自定义的异常类型。 异常处理的基本结构是使用try-catch块来捕获处理异常。try块用于包含可能引发异常的代码,而catch块用于捕获处理异常异常处理的基本语法如下: ```csharp try { // 可能引发异常的代码 } catch (ExceptionType1 ex) { // 处理特定类型的异常 } catch (ExceptionType2 ex) { // 处理另一种类型的异常 } finally { // 可选,无论是否发生异常,都会执行的代码 } ``` 在try块中,放置可能引发异常的代码。当异常发生时,会跳转到匹配的catch块进行处理。catch块可以根据需要捕获处理特定类型的异常。多个catch块可以按顺序捕获不同类型的异常。 在catch块中,可以使用异常对象(如上面的ex)来访问有关异常的信息,如错误消息、堆栈跟踪等。在catch块中,可以针对不同的异常类型采取不同的处理方式,例如记录日志、发送警报或提供友好的错误提示。 finally块是可选的,包含无论是否发生异常都需要执行的代码。它通常用于释放资源或进行清理操作。 除了try-catch-finally结构,还可以使用throw语句手动引发异常。通过自定义异常类型,可以创建自己的异常类,并根据需要定义异常处理逻辑。 示例: ```csharp try { int result = Divide(10, 0); // 可能引发异常的方法调用 Console.WriteLine(result); } catch (DivideByZeroException ex) { Console.WriteLine("除零错误:" + ex.Message); } catch (Exception ex) { Console.WriteLine("其他错误:" + ex.Message); } finally { Console.WriteLine("无论是否发生异常,都会执行的代码"); } static int Divide(int x, int y) { if (y == 0) { throw new DivideByZeroException("除数不能为零"); } return x / y; } ``` 在上述示例中,我们尝试对10除以0,这会导致Divide方法引发DivideByZeroException异常。在catch块中,我们捕获处理了这个特定类型的异常,并输出相应的错误消息。无论是否发生异常,finally块中的代码都会执行。 总结: C#中的异常处理机制通过try-catch-finally结构来捕获处理异常。try块用于包含可能引发异常的代码,catch块用于捕获处理特定类型的异常,finally块用于包含无论是否发生异常都需要执行的代码。通过使用自定义异常类型和throw语句,可以创建和引发自己的异常。合理的异常处理可以提高程序的健壮性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值