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

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

一、常见的异常
  • 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 捕获异常后的逻辑处理
    }

}

你可能感兴趣的:(exception,java)