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