return 语句应该是代码块中的最后一条指令吗?

Posted

技术标签:

【中文标题】return 语句应该是代码块中的最后一条指令吗?【英文标题】:should a return statement be the last instruction within a code block? 【发布时间】:2014-06-25 04:08:25 【问题描述】:

我真的需要帮助来理解一个 unreachable 语句在 Java 中的实际含义。我有以下内容,当我尝试编译时,我得到一个无法访问的语句错误。我在 *** 上查看了一些关于 unreachable statements here 的类似问题,但没有人回答我的问题。我想根据 return 语句的工作原理知道为什么这个版本不能编译。

public int refundBalance()

    return balance;
    balance = 0;

我问这个是因为这里的类似问题没有给我答案。我猜测 return 应该是代码块中的最后一个语句,但我对 Java 的了解不够,无法确定我的结论。因此,任何澄清将不胜感激。

【问题讨论】:

return 按照它说的做,它退出方法并返回给调用者。所以return之后的任何东西无法访问... 你知道return 是做什么的吗? balance = 0 永远不会被执行。把它放在那里绝对没有意义。 【参考方案1】:

当return语句被执行时,你期望接下来会发生什么!?控制权返回给调用程序,return 之后的语句永远无法执行。

看来你真的很想实现这个功能,显然退还当前余额如下:

public int refundBalance() 
    int result = balance;
    balance = 0;
    return result;

【讨论】:

【参考方案2】:

是的,return 语句应该是代码块中的最后一条语句。如果不是,则永远无法访问它下面的任何代码,因为return 语句将控制权转移到调用当前方法的方法(或首先转移到finally 块,如果它存在)。在 return 语句之后的代码块中没有任何意义,因此它是不允许的。

【讨论】:

【参考方案3】:

return 语句不仅规定了当前函数返回的内容,还导致函数终止。所以return后面的语句在任何情况下都是真的不可达,不应该存在。

【讨论】:

【参考方案4】:

为了使它工作,您必须将另一个变量设置为 balance,然后将 balance 设置为 0,然后返回另一个变量。

【讨论】:

【参考方案5】:

return 语句导致方法退出。因此,同一代码块中return 语句之后的任何语句都不会被执行。这就是您收到此错误的原因。

【讨论】:

以上是关于return 语句应该是代码块中的最后一条指令吗?的主要内容,如果未能解决你的问题,请参考以下文章

主程序中应该允许返回语句吗?

finally中的return

异常处理关于return语句的执行顺序注意事项

Python怎么return后让循环继续运行?

Python怎么return后让循环继续运行?

Python札记7:在try...except...finally中return