【问题标题】:Placement of return statement in a method with finally block在带有 finally 块的方法中放置 return 语句
【发布时间】:2014-01-18 15:04:54
【问题描述】:

我有一个简单的疑问。在以下两个代码中,第一个 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;
} 

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

【问题讨论】:

  • 你永远不应该在 finally 块中包含 return 语句。这可能会覆盖在 try 块中完成的事情,并可能导致非常复杂的逻辑。
  • finally 块中返回的任何内容实际上都会覆盖 try/catch 块中的任何异常或返回值。

标签: java return finally


【解决方案1】:

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

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

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

【讨论】:

  • 这是总是不好的做法。
  • (a) ... 在这种情况下,该方法将没有返回值 - 我希望您的意思是在 catch 分支中未捕获到的异常。跨度>
猜你喜欢
  • 2013-06-04
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2020-06-17
  • 2018-03-21
  • 2014-05-11
  • 1970-01-01
相关资源
最近更新 更多