2

有什么区别:

while( true ) {
    try {
        // something 
    } catch( Exception e ) {
        break; 
    }
}

try {
    while( true ) {
    // something 
    // break; // eventually
    }
} catch( Exception e ) {

}

前者是否在每次迭代时运行 try-catch 或编译器是否生成相同的代码。哪个是首选?

编辑:休息;在第二个示例中从 catch 块中删除,因为不需要。

4

1 回答 1

6

不同之处在于,第一个将按预期编译和工作(发生异常时跳出循环),第二个不会编译。

编译器错误break cannot be used outside of a loop or a switch几乎是自我解释的(您试图在break循环之外使用(语法上),这是不允许的)。

我将修改您的示例以说明这一点:

try {
    while( true ) {
    // something 
    // break; // eventually
    }
    /* --> more code, that could throw an exception <-- */
} catch( Exception e ) {
    break; 
}

如果在我插入评论的地方发生异常,应该打破什么?

要明确回答您的问题:

前者是在每次迭代时运行 try-catch 还是编译器生成相同的代码?

是的,前者在每次迭代时运行一个 try/catch 块。

哪个是首选?

第一个,很明显。

首选方式是第二种方式,只是break在 catch 块中没有关键字。正如 Ren 在他的评论中指出的那样,当发生异常时,您将执行 catch 块(记录错误或类似的东西),然后执行 catch 块下面的代码。不需要break关键字。

于 2013-02-26T23:08:22.030 回答