java 程序设计语言可抛出三种结构(throwable):java
虽然何时抛出什么,不老是那么的清晰,可是依然存在一些指导性原则api
- 若是能够适当的恢复,请使用受检异常(强迫调用者处理该异常或者抛出去)
- API 设计者让api 用户面对受检异常,强迫处理受检异常
未受检的抛出结构包括(运行时异常、错误)jvm
- 两者都是不须要也不该该被捕获的可抛出结构
- 若是抛出为受检异常,每每就属于不可恢复的情形,继续执行下去有害无益
使用运行时异常代表变成错误设计
虽然 java 语言规范没要求,可是错误每每被jvm保留用来表示资源不足、约束失败、或其余是程序没法执行下去的条件资源
- 约定俗成,最好不要再去建立Error 的子类
- 全部未受检抛出结构都应该是RuntimeException 的子类
- 能够定义一个新的抛出结构(不属于上述三者),这样作没有任何益处,并且困扰api使用者
总之:io
- 可恢复异常,使用受检异常
- 程序错误,使用运行时异常
- 受检异常每每指明了恢复条件,提供辅助方法就很重要(好比电话呼叫失败,捕获异常能够查询欠费金额而且返回给用户看)