最佳答案
通过阅读所有的问题已经在这个论坛有关的主题(见标题) ,我完全理解 finally
总是被调用。(除了 System.exit
和无限循环)。但是,我想知道是否在 catch 块中调用了 return
,然后在 finally 块中调用了另一个 return
。
例如:
public static void main(String[]args) {
int a = new TestClass().absorbeTheValue();
}
int absorbeTheValue() {
try {
int a = 10/0;
if (a > 0) return 4;
} catch(Exception e) {
return 45;
} finally {
return 34;
}
}
所以这里的输出(当方法被调用时)在任何情况下都是34。这意味着最终总是会被运行。我认为,虽然其他“回报”不运行在所有。在许多帖子中,我发现最终写的内容是在 catch 子句 return 已经写过的内容之上。我的理解是,一旦 catch 子句中的返回值即将被计算,控制流就会传递给 finally 子句,而 finally 子句又会传递另一个返回值,这一次,返回值将被计算,而不会将控制传递回 catch 子句。这样,在运行时调用的唯一 return
将是 finally 返回。你同意吗?
finally
中的 return
不会将控件传递回程序,而是返回值并终止方法。可以这么说吗?