我运行这段代码:
public static void main(String[] args) {
System.out.println(catcher());
}
private static int catcher() {
try {
System.out.println("TRY");
thrower();
return 1;
} catch (Exception e) {
System.out.println("CATCH");
return 2;
} finally {
System.out.println("FINALLY");
return 3;
}
}
private static void thrower() {
throw new RuntimeException();
}
Run Code Online (Sandbox Code Playgroud)
我希望在输出中看到这个:
TRY
CATCH
FINALLY
2
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是输出是:
TRY
CATCH
FINALLY
3
Run Code Online (Sandbox Code Playgroud)
我糊涂了.return 2声明在哪里?这是return at finally一种不好的做法吗?
在 JSE7 语言规范\xc2\xa714.1中,语句return被定义为突然终止。如果您的finally块突然完成(您的return),try块会因相同的原因结束(如\xc2\xa714.20.2中定义):
\xc2\xa714.1 \n [...] 突然完成总是有一个相关的原因,它是以下之一: [...] 没有值的返回 [...] 带有给定值的返回[...]
\n\n\xc2\xa714.20.2 \n [...] 如果finally 块因原因S 突然完成,则try 语句因原因S 突然完成(并且原因R 被丢弃)。[...](原因 R 是 的结果catch)。
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |