给定以下代码:
String test() {
try {
return "1";
} finally {
return "2";
}
}语言规范是否定义了调用test()的返回值?换句话说:它在每个JVM中都是一样的吗?
在Sun JVM中,返回值是2,但我希望确保这不是依赖于VM的。
发布于 2010-02-22 17:38:48
是的,language spec定义"2“是结果。如果VM使用不同的方式,那么它就不符合规范。
大多数编译器都会抱怨这个问题。例如,Eclipse将声明返回块永远不会被执行,但这是错误的。
编写这样的代码是非常糟糕的做法,千万不要这样做:)
发布于 2010-02-22 17:42:05
将始终执行finally块,但在以下示例中除外:
String test() {
try {
System.exit(0);
} finally {
return "2";
}
}在这种情况下,JVM将停止,而不执行finally块。
因此,在您的示例中,返回值将为2。
发布于 2015-03-26 22:25:34
你可以参考下面的链接。我希望它能提供所有细节:
http://www.programmerinterview.com/index.php/java-questions/will-finally-run-after-return/
它说,最终块将始终执行,即使try或catch块有返回语句。如果finally块也有return语句,那么这将覆盖try或catch块中的return语句,在这种情况下,try/catch中抛出的任何异常都将被丢弃(错误的方法)。
https://stackoverflow.com/questions/2309964
复制相似问题