Java try-catch在while循环或外部

时间:2013-02-26 23:02:45

标签: java

有什么区别:

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

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

}

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

编辑:打破;因为没有必要,所以在第二个例子中从catch块中删除了。

1 个答案:

答案 0 :(得分: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块。

  

哪个更受欢迎?

显然是第一个。

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