自定义异常及全局异常拦截处理

实际项目开发中肯定少不了异常的处理,了解自定义 异常 和全局异常处理让我们更加愉快的工作

一、常见的异常

  • NullPointerException===============>空指针异常
  • ClassCastException================>类型强制转换异常
  • IndexOutOfBoundsException=========>索引越界异常
  • SQLException====================>操作数据库异常
  • IOException======================>输入输出异常
  • NoSuchMethodException============>方法未找到异常
  • ClassNotFoundException============>类找不到异常
  • java.lang.IllegalAccessError==========>违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。
  • java.lang.ExceptionInInitializerError====>初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。

PS: 异常还有很多,以上只是列举了一些常见的异常,更加详细的异常种类介绍请参考 这里

二、异常的处理

异常处理的方式无外乎两种:

  • try/catch发现异常,立即处理
  • throw 往上抛出,交给调用者处理

1、捕获异常示例:

public class ExcepTest{ 
    public static void main(String args[]){ 
    int a[] = new int[2];
    try{ 
       System.out.println("Access element three :" + a[3]);
    }catch(ArrayIndexOutOfBoundsException e){ 
       System.out.println("Exception thrown :" + e);
    }finally{ 
       a[0] = 6;
       System.out.println("First element value: " +a[0]);
       System.out.println("The finally statement is executed");
    }
  }
}
/** * 注意下面事项: * 1、catch 不能独立于 try 存在。 * 2、在 try/catch 后面添加 finally 块并非强制性要求的。 * 3、try 代码后不能既没 catch 块也没 finally 块。 * 4、try, catch, finally 块之间不能添加任何代码。 */

2、抛出示例:

public class className{ 
   public void withdraw() throws RemoteException,InsufficientFundsException{ 
       // Method implementation
   }
}
/** * 注意下面事项: * 1、如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。 * 2、throws 关键字放在方法签名的尾部 * 3、一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。 */

三、自定义异常

public class RequiredFieldIsNullException extends RuntimeException{ 

    //使用父类的无参构造
    public RequiredFieldIsNullException(){ 
        super();
    }

    //使用父类的String传参构造
    public RequiredFieldIsNullException(String msg){ 
        super(msg);
    }
}
/** * 注意下面事项: * 1、所有异常都必须是 Throwable 的子类。 * 2、如果希望写一个检查性异常类,则需要继承 Exception 类。 * 3、如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。 */

四、全局异常处理

@RestControllerAdvicehttps 注解详情

@RestControllerAdvicehttps
public class GlobalExceptionAdvice { 

    //捕获异常并对异常进行响应的处理
    @ExceptionHandler(RequiredFieldIsNullException.class)
    public Result<Object> RequiredFieldIsNullException(RequiredFieldIsNullException e){ 
        //todo 捕获异常后的逻辑处理
    }

}
    原文作者:Mr丶吕
    原文地址: https://blog.csdn.net/Csdn_xiansheng/article/details/121954699
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞