异常有哪些分类
所有异常都是 Throwable 的子类,分为 Error 和 Exception。
-
Error 是 Java 运行时系统的内部错误和资源耗尽错误,例如 StackOverFlowError 和 OutOfMemoryError,这种异常程序无法处理。
-
Exception 分为受检异常和非受检异常,受检异常需要在代码中显式处理,否则会编译出错,非受检异常是运行时异常,继承自 RuntimeException。
受检异常:
-
无能为力型,如字段超长导致的 SQLException。
-
力所能及型,如未授权异常 UnAuthorizedException,程序可跳转权限申请页面。
-
常见受检异常还有 FileNotFoundException、ClassNotFoundException、IOException等。
非受检异常:
-
可预测异常,例如 IndexOutOfBoundsException、NullPointerException、ClassCastException 等,这类异常应该提前处理。
-
需捕捉异常,例如进行 RPC 调用时的远程服务超时,这类异常客户端必须显式处理。
-
可透出异常,指框架或系统产生的且会自行处理的异常,例如 Spring 的 NoSuchRequestHandingMethodException,Spring 会自动完成异常处理,将异常自动映射到合适的状态码。