SpringBoot 异常处理

异常体系

  • 首先分为两类:检查异常(开发者必须捕获或者抛出该异常)、非检查异常(Error、运行时异常)
  • Error:内存溢出、文件损坏、服务器宕机等
  • 编译时异常:编译失败;例如文件找不到、SQLException、IOExcetion、类找不到等
  • 运行时异常:主要是代码逻辑错误,例如数组越界访问、空指针、除数为0等

 

异常打印的常用函数

// 异常原因
e.getMessage() 

e.getCause().getMessage()

// 打印栈信息
printStackTrace()

 

针对检查异常的两种处理方式

方式一

try-catch-finally捕获

注:

  • 只有当在 try 或者 catch 中调用退出 JVM 的相关方法,例如 System.exit(0) ,此时 finally 才不会执行,否则 finally 永远会执行。
  • 如果finally 块中有 return 关键字,那么 try 块以及 catch 块中的 return 都将会失效,所以在开发的过程中不应该在 finally 块中写 return 语句
    public String index(){
        try{
            ......  //可能产生异常的代码 }
            catch( ExceptionName1 e ){
            ......  //当产生ExceptionName1型异常时的处置措施 }
            catch( ExceptionName2 e ){
            ......    //当产生ExceptionName2型异常时的处置措施 }
            finally{
            ......     //无论是否发生异常,都无条件执行的语句 
            }
    }

方式二

抛出异常

注:

  • 检查异常不会自动向上抛出,必须显式处理;非检查异常会自动向上抛出,直到被捕获或者程序终止;
  • 至于方法上的throws关键字,则是java强制要求抛出编译时异常时需要声明,抛出运行时异常时不强制声明;
    public String index() throws IOException {
        throw new IOException("test");
    }

 

自定义异常

public class MyException extends RuntimeException{
    public MyException() {
        super();
    }

    public MyException(String message) {
        super(message);
    }
}

 

try-with-resources

关闭资源

 

全局异常处理

@ControllerAdvice:使用该注解表示开启了全局异常的捕获;

 

参考链接

【1】Java 异常处理概念及最佳实战

【2】SpringBoot 全局异常处理

【3】全局异常处理Demo

posted @   先娶国王后取经  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示