在带有finally块的方法中放置return语句

时间:2014-01-18 15:04:55

标签: java return finally

我有一个简单的怀疑。在以下两个代码中,第一个return语句放在finally块中

public int method1(){
    try{
        // Some Stuff
    } catch(Exception e){
        e.printStackTrace();
    } finally{
        return 0;
    }
}

并在第二个return语句中正常放置

public int method1(){
    try{
         // Some Stuff
    } catch(Exception e){
        e.printStackTrace();
    } finally{

    }
    return 0;
} 

这两者有什么区别吗?哪个可以作为更好的选择?为什么呢?

1 个答案:

答案 0 :(得分:6)

在finally块中使用“return”不是一个好习惯。由于两个原因,finally块可以执行:

(a)try块抛出异常(并没有被catch块捕获) - 在这种情况下,该方法将没有返回值,因此return something语句中的try语句finally块将无效。

(b)return something块正常完成。如果该块以{{1}}结尾,则代码对读者来说有点混乱,因为现在有两个相关的返回语句,并且不清楚哪个应该优先于另一个。