这个java片段可以重写吗?

时间:2012-07-12 09:12:32

标签: java

任何人都可以建议如何重新编写以下Java代码段,如果是这样,为什么它不合适,谢谢!!

try {
    int i = 0;
    while (true)
        a[i++].func();
} catch(ArrayIndexOutOfBoundsException e) {
}

4 个答案:

答案 0 :(得分:8)

使用for-each循环:

for(TypeOfArray item : a) {
    item.func();
}

或者是一个简单的for循环:

for(int i = 0; i < a.length; i++) {
    a[i].func();
}

结果字节码或多或少相同,但我发现 - 每个循环更优雅。您的代码不合适,因为它:

  • 使用例外进行流量控制
  • 使用while(true)循环(如果有其他方法,则不要使用它)

答案 1 :(得分:4)

作为一个很好的一般原则,您不应该使用流量控制的例外。坦率地说,在阵列末端运行只是松懈。

尝试使用“foreach”循环:

for (IHasFunc hasFunc : a) {
    hasFunc.func();
}

答案 2 :(得分:0)

不要使用异常来结束循环。使用a.length确定尺寸。

答案 3 :(得分:0)

如果您使用for循环:

for (YourObject obj : a) {
   obj.func();
}

然后你就不需要索引变量了。

如上所述,异常对流量控制不利。它们的创建成本很高,并且难以追踪它们的执行流程。