你是否试过用一个异常来结束一个正常的控制流,如
try{
int i = 0;
while(true){
range[i++].climb();
}
} catch (ArrayIndexOutOfBoundsException){
}
这样的写法确实很标新立异,而且确实能够实现遍历数组的目的,可能让你颇有成就感,就像探索到了新大陆一样。不过现实会泼你冷水,往往显得你对编程流于表面,没有思考,没有程序设计的概念,不注重代码质量。
那么这样的写法有什么错误之处:
- 掩盖了不可预知的错误,降低了维护性。因为代码认为抛出ArrayIndexOutOfBoundsException异常是一个正常的结束循环的信号,但是现实可能是代码确实存在了bug。
- 降低了性能。因为JVM往往会对标准的遍历(如 for each),进行优化。当你把代码写在try-catch里,反而阻止了JVM的优化。
- 另外,这样的代码很冗长,难道不是吗?
所以,在使用异常的时候,应该坚持异常只应该被当做异常来处理。