更高层的实现应该捕获低层的异常,同时抛出可以按照高层抽象进行解释的异常。这种做法被称为异常转译(exception translation)。一种特殊的异常转译形式成为异常链(exception chaining)。尽管异常转译与不加选择地从低层传递异常的做法相比有所改进,但是它也不能被滥用。处理来自低层异常最好的做法是,在调用低层方法之前确保它们会成功执行,从而避免它们抛出异常。有时候,可以在给
一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被成为具有失败原子性(failure atomic)。最简单的办法莫过于设计一个不可变的对象(见第15条)。对于在可变对象上执行操作的方法,获得失败原子性最常见的方法是,在执行操作之前检查参数的有效性(见第38条)。一种类似的获得失败原子性的办法是,调整计算处理过程的顺序,使得任何可能会失败的计算部分都在对象状态被修改之前
始终要单独地声明受检的异常,并且利用Javadoc的@throws标记,准确的记录下抛出每个异常的条件。如果一个方法可以抛出多个异常类,则不要使用“快捷方式”声明它会抛出这些异常类的某个超类。永远不要声明一个方法“throws Exception”,或者更糟糕的是声明它“throws Throwable”,因为它实际上掩盖了该方法在同样的执行环境下可能抛出的任何其他异常。对于方法可能抛出的未受检异
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号