根据 Java 语言规范,第 14.20.2 节
通过首先执行 try 块来执行带有 finally 块的 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 如何解释或 try finally 块如何由 jvm 处理或转换?
是jvm使用GOTO部分跳转部分去finally部分还是堆栈已经维护?