这个java代码段可以重新编写吗?

这个java代码段可以重新编写吗?,java,Java,有人能建议如何重新编写下面的Java代码段吗?如果有,为什么不合适,谢谢 try { int i = 0; while (true) a[i++].func(); } catch(ArrayIndexOutOfBoundsException e) { } 使用循环: 或者,一个简单的for循环: for(int i = 0; i < a.length; i++) { a[i].func(); } for(int i=0;i

有人能建议如何重新编写下面的Java代码段吗?如果有,为什么不合适,谢谢

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

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

for(int i = 0; i < a.length; i++) {
    a[i].func();
}
for(int i=0;i
结果字节码或多或少是相同的,但我发现每个循环都更优雅。您的代码不合适,因为它:

  • 将异常用于流控制
  • 使用while(true)循环(如果有其他方法,请不要使用)

作为一个好的一般原则,您不应该将异常用于流量控制。坦率地说,从阵列的末端运行只是一种懈怠

尝试使用“foreach”循环:


不要使用异常结束循环。使用
a.length
确定大小。

如果将
用于循环,则:

for (YourObject obj : a) {
   obj.func();
}
这样就避免了对索引变量的要求


如前所述,异常不利于流控制。创建它们的成本很高,跟踪它们的执行流程也很困难。

这是家庭作业吗?你知道这是在做什么吗?如果是这样的话,你必须知道为什么它是不合适的……这在本手册第42项中有所涉及。
for (IHasFunc hasFunc : a) {
    hasFunc.func();
}
for (YourObject obj : a) {
   obj.func();
}