【发布时间】:2013-02-19 23:21:25
【问题描述】:
通过阅读本论坛中与上述主题相关的所有问题(见标题),我完全理解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。这意味着 finally 总是会运行。我认为虽然其他“回报”根本没有运行。在许多帖子中,我发现最终将内容写入已由 catch 子句返回的内容。我的理解是,一旦 catch 子句中的返回值即将被评估,控制流就会传递给 finally 子句,该子句又会返回另一个返回值,这一次将评估返回值,而不会将控制权传递回 catch 子句.这样,在运行时调用的唯一return 将是最终返回。你同意吗?
finally 中的return 不会将控制权传递回程序,而是返回值并终止方法。我们可以这样说吗?
【问题讨论】:
-
请缩进你的代码。
-
你有什么问题??
标签: java return try-catch finally