异常基础
Exception与Error
在Java
中,异常都有一个共同的祖先java.lang
包中的Throwable
类。Throwable
类有两个重要的子类:
Exception
,应用程序可以处理的异常。即发生异常时,应用程序可以通过try-catch
来捕获/处理或者向上抛出异常,不应该也不会影响应用程序的运行。Error
,应用程序不能处理的异常,应用程序会退出。
Exception
可以分成两类:
- 运行时异常。
RuntimeException
类及其子类。编译期间不会检查此类异常,程序运行期间才会出现此类异常。需要程序员添加try-catch
或者throw
来处理此类异常。 - 非运行时异常。也称为编译异常,编译期间就需要使用
try-catch
或者throw
来处理,否则无法通过编译。如下所示。
受检异常与非受检异常
- 非受检异常。包括
Error
,Exception
及子类。编译期间不检查此类异常。 - 受检异常。非受检异常之外的异常均属于受检异常。编译期间编辑器检查出的语句异常,需要立即处理,使用
try-catch
或throw
处理。
异常使用场景
向上抛出异常,调用方负责处理异常
- 一个事务中的异常,需要向上抛出,否则事务可能不能正常回滚。
- 方法调用者负责处理异常,当前方法不负责处理这个异常
程序本身捕获异常,自己负责处理
- 这个异常被
catch
不能引起其他逻辑问题,例如读缓存出现异常,应该继续读取源数据库,而不应该影响此次操作。 - 异常被
catch
后,不能影响用户体验,可以考虑使用springboot
全局异常提高用户体验。
引用
- https://segmentfault.com/a/1190000039024792
- http://www.4k8k.xyz/article/qq_41378597/86223058