有什么区别:
while( true ) {
try {
// something
} catch( Exception e ) {
break;
}
}
和
try {
while( true ) {
// something
// break; // eventually
}
} catch( Exception e ) {
}
前者是否在每次迭代时运行 try-catch,或者编译器是否生成相同的代码。 哪个是首选?
编辑:中断;在第二个示例中从 catch block 中删除,因为不需要。
最佳答案
区别在于,第一个将按预期编译并工作(发生异常时跳出循环),而第二个将无法编译。
编译器错误将是break不能在循环或开关之外使用
,这几乎是 self 解释的(您正在尝试在循环之外使用break
) (语法上),这是不允许的)。
我将修改您的示例来说明这一点:
try {
while( true ) {
// something
// break; // eventually
}
/* --> more code, that could throw an exception <-- */
} catch( Exception e ) {
break;
}
如果我插入注释的地方出现异常,应该从什么方面打破?
明确回答您的问题:
Does the former run a try-catch on every iteration or does the compiler generate the same code?
是的,前者在每次迭代时运行一个 try/catch block 。
Which is preferred?
显然是第一个。
首选方式是第二种方式,只是在 catch block 中不使用 break
关键字。正如 Ren 在评论中指出的那样,当发生异常时,您将执行 catch block (记录错误或类似的内容),然后执行 catch block 下面的代码。不需要 break
关键字。
关于Java try-catch 在 while 循环内部或外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101169/