通过阅读本论坛中与上述主题相关的所有问题(请参见标题),我充分了解到
例如:
当调用该方法时,输出结果始终为34。这意味着finally子句总是会被执行。但我认为其他的“return”语句根本没有被执行。在许多帖子中,我发现finally会将内容覆盖catch子句的返回值。我的理解是,一旦要评估catch子句中的返回值,控制流就会转移到finally子句,而finally子句中有另一个返回值,这次返回值将被评估,而不会将控制权传回catch子句。这样,在运行时唯一调用的
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子句总是会被执行。但我认为其他的“return”语句根本没有被执行。在许多帖子中,我发现finally会将内容覆盖catch子句的返回值。我的理解是,一旦要评估catch子句中的返回值,控制流就会转移到finally子句,而finally子句中有另一个返回值,这次返回值将被评估,而不会将控制权传回catch子句。这样,在运行时唯一调用的
return
将是finally的返回值。你同意这个观点吗?
finally
中的return
不会将控制权传回程序,而是返回值并终止方法。我们可以这么说吗?