【发布时间】:2013-10-23 10:20:44
【问题描述】:
根据 Java 语言规范,Section §14.20.2
带有 finally 块的 try 语句通过首先执行 try 块来执行。然后有一个选择:
- 如果 try 块的执行正常完成,那么 finally 块被执行,然后有一个选择:
- 如果 finally 块正常完成,则 try 语句正常完成。
- 如果 finally 块由于原因 S 突然完成,则 try 语句由于原因 S 突然完成
如果我正确解释它,那么在执行 try 块之后最终会被调用,但是这一切是如何工作的以及为什么我得到输出,
public static int TestTryFinallyBlock()
{
int i =0;
try
{
i= 10; //Perform some more operation
return i;
}
finally
{
i = 40;
}
}
public static void main( String[] args )
{
int i1 = TestTryFinallyBlock(); //Here the output was 10 not 40
}
我想知道这个东西是如何产生输出 10 的。
是不是在执行try块遇到return语句时输出值已经压栈,然后执行finally块
我知道先遇到 return 然后 finally 块运行所以输出是 10,但是
jvm 如何解释或 jvm 如何处理或转换 try finally 块?
是jvm使用GOTO段跳转段到finally段还是栈已经维护?
【问题讨论】:
-
try/catch/最终是由编译器执行还是由jvm执行?
-
@vikingsteve 谢谢我编辑了我的问题
标签: java try-finally