通过阅读本论坛中已经提出的与上述主题相关的所有问题(见标题),我完全理解finally
总是被调用。(除了 fromSystem.exit
和无限循环)。但是,我想知道是否return
在 catch 块中调用了 a ,然后return
从 finally 块中调用了另一个。
例如:
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。这意味着 finally 总是运行。我认为虽然其他“回报”根本没有运行。在许多帖子中,我发现最终将内容写入 catch 子句返回已经写入的内容。我的理解是,一旦 catch 子句中的返回值即将被评估,控制流就会传递给 finally 子句,该子句又会返回另一个返回值,这一次将评估返回值,而不会将控制权传递回 catch 子句. 这样,return
在运行时唯一调用的将是 finally 返回。你同意吗?
A return
infinally
不会将控制权传递回程序,而是返回值并终止方法。我们可以这么说吗?