Java try-catch 在 while 循环内部或外部

标签 java

有什么区别:

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/

相关文章:

java - 如何动态指定JMX端口号

java - Java 中的多态性以及从这些类创建对象

Java 8 + Swing : Modal Dialog Theory

java - Android REQUEST_DENIED Google 地点 API

java - RestTemplate显示找不到页面但没有错误异常

java - 如何获取构建项目时使用的 eclipse 版本

java - "GL11.glMatrixMode()"问题

java - 在 Java 中反转数组

java - 如何从每个线程的数组中读取唯一元素?

Java:引用转义