java异常 自定义异常 全局异常统一处理

异常

在 Java 中,异常是不想要发生或者意外发生的事件,它们会破坏程序指令的正常流程。当程序执行期间发生异常时,Java 会创建一个对象,这个对象称为异常对象。它包含有关异常的信息,例如异常的名称、说明以及发生异常时程序的状态。

Java通过API中Throwable类的众多子类描述各种不同的异常。 因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。

异常分类

Throwable 两个子类ExceptionError
在这里插入图片描述
异常分类:
运行时异常(又称:非受检查异常):这些异常可能被程序员避免,与检查性异常相反,运行时异常可以在编译时被忽略。例如,除以零或强制类型转换错误属于运行时异常。
检查性异常:这些异常通常由用户错误或问题引起,是程序员无法预见的。例如,试图打开一个不存在的文件时,会抛出检查性异常。这些异常在编译时不能被简单地忽略。

错误:错误(Error)不是异常,而是脱离程序员控制的问题。例如,栈溢出是一个错误,通常在代码中被忽略。

在这里插入图片描述

自定义异常

创建一个类来表示自定义异常。通常,这个类应该继承自Java标准库中的Exception类或者RuntimeException类,具体取决于你想要定义的异常是否是受检查异常(Checked Exception)或非受检查异常(Unchecked Exception)

/**
 * 登录失败异常
 */

public class LoginFailedException extends RuntimeException{
	//构造函数
    public LoginFailedException(String msg){
	    //构造方法使用super(msg)调用父类RuntimeException的构造方法
        super(msg);//参数表示异常的详细描述信息
    }
}

异常处理方式

  1. 使用 try-catch-finally:使用 try 包围可能出问题的代码,用 catch 来捕获并处理异常,最后用 finally 来执行无论如何都要执行的代码(例如资源的清理工作)
    public static void main(String[] args) {
        try {
            System.out.println(2 / 0);
        } catch (Exception e) {
            System.out.println("捕获到了异常:" + e.getMessage());
        }
    }
  1. 使用 throws 声明抛出异常:使用 throw 关键字抛出异常,使用 throws 关键字在方法声明中抛出异常。

项目中全局异常处理方式

使用 @ControllerAdvice 和 @ExceptionHandler
首先,我们可以使用 @ControllerAdvice 注解来标记一个全局异常处理类。这样,我们就可以在该类内部使用 @ExceptionHandler 注解来捕获异常。

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    //LoginFailedException 自定义异常
    @ExceptionHandler
    public Result exceptionHandler(LoginFailedException ex){
        log.error("异常信息:{}", ex.getMessage());
        return Result.error(ex.getMessage());
    }
}

@RestControllerAdvice是Spring框架中的一个注解,它结合了@ControllerAdvice@ResponseBody注解的功能。它的作用是全局性地处理控制器层(Controller)抛出的异常,并将异常信息以JSON格式返回给客户端,通常用于RESTful风格的Web服务。


觉得有用请点个👍。
虚心接受大家指点,谢谢你们

  • 35
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值