Java中的受检异常

Java中的受检异常

Java提供了三种异常类型,受检异常(checked exception)、运行时异常(runtime exception)、错误(error)。那么这受检异常在实际开发中又有什么最佳实践呢?程序员

受检异常并发

若是抛出的异常是可恢复的,同时咱们也指望API的调用者捕获异常进行恢复处理,那么咱们应该使用受检异常。受检异常会强迫API的使用者截获异常并恢复处理,或者进行声明继续抛出。 工具

1.IDE工具提示须要针对受检异常进行处理 spa

2.捕获受检异常并进行恢复处理 对象

3.从新声明受检异常blog

总而言之,对于可恢复的状况,使用受检异常;若是不清楚是否可能恢复,则最好使用未受检异常。开发

虽然受检异常是Java语言一项很好的特性,它强迫程序员处理异常,大大加强程序的可靠性。可是过度的使用受检异常会使API使用很是不方便,调用者必须在catch块中处理全部的受检异常,或者调用者必须声明抛出这些受检异常。同步

受检异常恢复的原子性io

对于受检异常来讲,咱们指望在执行某个操做失败的时候,对象仍然保持在一种定义良好的可用状态之中,这样咱们就能够从异常中进行恢复。通常而言,失败的方法调用应该使对象保持调用以前的状态,即受检异常的原子性。exception

咱们有如下方式能够实现受检异常的原子性

1.使用不可变对象

   若是对象不可变,那么在对象实例化的时候就肯定了其状态,之后不再能发生改变了,因此方法的执行就不能修改对象的状态,只能经过新建对象做为返回参数。

2.提早检查参数的有效性

   在执行可变对象的方法以前检查参数的有效性,是的对象的状态被修改以前,先抛出适当的异常,这是可变对象获取受检异常原子性最多见的方法。

3.编写拦截操做失败并回滚对象状态的恢复代码。

4.如今临时拷贝的对象上执行操做,当操做成功后再用临时拷贝中的结果代替对象的内容。

虽然通常状况下你们都但愿实现受检异常的原子性,可是并不是老是能够作到的,例如缺乏同步机制,并发修改同一个对象的状态。即便有时能够轻松实现受检异常的原子性,可是其可能会险种的增长开销和复杂性,并不必定是人们所指望的。

相关文章
相关标签/搜索