Exception异常处理

Posted moxiaodan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exception异常处理相关的知识,希望对你有一定的参考价值。

编译期异常:写代码时候变为红色,可能会产生异常,需要处理才能执行,一般情况下, API 中写了 throws 的 Exception 都不是 RuntimeException 。

  第一种方法,把异常抛出去 方法上 throws ,交给虚拟机来处理,当不匹配的时候,虚拟机就会将异常打印出来,终止程序。

  第二种方法,不终止程序,用 try { } catch ()  { } 来处理异常,把异常打印在控制台,程序继续执行 ,以上是编译期异常。

还有运行期异常,运行时异常继承 RuntimeException ,是非受检异常,如 NullPointerException、IndexOutOfBoundsException 等,抛出运行时异常,可不处理默认交给 jvm 。

由于这类异常要么是系统异常,无法处理,如网络问题;要么是程序逻辑错误,如空指针异常; JVM 必须停止运行以改正这种错误,所以运行时异常可以不进行处理,不需要捕获或向上抛出,

当然也可以处理,使用 try{ } catch() { } 处理,将异常打印到控制台,后续代码继续执行,一般建议 runtimeException 也进行 try...catch 处理

  工作中必须对传递的参数做合法的校验,如果参数不合法,我们必须使用抛出异常的方式,告知方法的调用者,传递的参数有问题,最终交给 jvm ,

  自定义异常:告诉用户请求有问题,出异常的时候返回一个 code 给前端,如果不进行自定义异常,前后端分离的时候,后端出异常,显示给前端的页面会很不友好

  public ValidException extends RuntimeException {  // 最顶级的运行异常

    private Integer code;
    private String msg;

    public ValidException(int code,String msg) {
    super(msg);
    this.code = code;
    this.msg = msg;
    }
  }

  还需要写一个 Handler 全局的: 拦截相应的异常类

  @ControllerAdvice
  public class ValidExceptionHandler {
    @ExceptionHandler(value = Exception.class) //处理 Exception ,如果出现了该异常,就会拦截进行相应的处理,如果改成 ValidException ,则处理 ValidException 这个类
    @ResponseBody //响应数据给前端
    public JsonData Handler(Exception e) {
      if(e instanceof ValidException) {
        ValidException validException = (ValidException) e;
        return JsonData.buildError(validException.getMsg(), validException .getCode());
      } else {
        return JsonData.buildError("全局异常,位置错误");  //在 JsonData 里面有设置错误码 code = -1
      }
    }
  }

在抛出异常的时候,如果和自定义里面的异常能对应上,就会进行对应的处理

 



















以上是关于Exception异常处理的主要内容,如果未能解决你的问题,请参考以下文章

解析Exception和C#处理Exception的常用方法总结

解析Exception和C#处理Exception的常用方法总结

解析Exception和C#处理Exception的常用方法总结

解析Exception和C#处理Exception的常用方法总结

解析Exception和C#处理Exception的常用方法总结

unhandled exception(没有处理异常)