企图利用java的错误判断机制来提高性能是错误的:
1.因为异常机制的设计初衷是用于不正常的情形,所以很少会有JVM实现试图对它们进行优化,使得与显式的测试一样快速。
2.把代码放在try-catch块中反而阻止了现在JVM实现本来可能要执行的某些特定优化。
3.对数组进行遍历的标准模式并不会导致冗余的检查。有些现在的JVM实现会将它们优化掉。
异常应该只用于异常的情况下;它们永远不应该用于正常的流程控制。
设计良好的API不应该强迫它的客户端为了正常的控制流而使用异常。
“状态测试方法”和“可识别的返回值”:
如果对象将在缺少外部同步的情况下被并发访问,或者可被外界改变状态,使用可被识别的返回值可能是很有必要的,因为在调用“测试状态”方法和调用对应的“状态相关”方法的时间间隔之中,对象的状态有可能发生变化。如果单独的“状态测试”方法必须重复“状态相关”方法的工作,从性能的角度考虑,就应该使用可被识别的返回值。如果所有其他方面都是等同的,那么“状态测试”方法则略犹豫可被识别的返回值。
总而言之,异常是为了在异常情况下使用而设计的。不要将它们用于普通的控制流,也不要编写迫使他们这么做的API。