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

Rak*_* KR 0 java return finally

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

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

并在第二个return声明中正常放置

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

    }
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

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

Ita*_*man 6

在finally块中"返回"并不是一个好习惯.finally由于以下两个原因,可以执行该块:

(a)try块抛出异常(并且没有被catch块捕获) - 在这种情况下,该方法将没有返回值,因此return somethingfinally块中的语句将不起作用.

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