Java程序设计语言提供了三种可抛出结构:受检的异常,运行时异常和错误。
1.如果期望调用者能够适当地恢复,对于这种情况就应该使用受检异常。
2.用运行时异常来表明编程错误
3.实现的所有未受检的可抛出结构都应该是RuntimeException的子类
总而言之,对于可恢复的情况,使用受检异常;对于程序错误,则使用运行时异常。如果不知道使用哪种异常的时候,就抛出未受检的异常。
思考:对于一些意料之外的情况,我们的代码很多都返回null,空list,或默认值。但null很多时候会导致npe, 和默认值一样一旦出问题很难查到root cause,可以直接抛出异常。