解析Java finally
Posted hellohello
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析Java finally相关的知识,希望对你有一定的参考价值。
以下用几个简单的例子介绍一下finally的用法:
例子1
public class Test { public static void main(String[] args) { System.out.println("return value of test(): " + test()); } public static int test() { int i = 1; try { System.out.println("exec try block"); return i; } finally { System.out.println("exec finally block"); } } }
执行结果:
exec try block exec finally block return value of test(): 1
即使try中执行了return,finally依然会执行。如果以上的return i; 替换为System.exit(0); 则finally不会执行,因为虚拟机已经停止了。
例子2
public static int getValue() { try { return 0; } finally { return 1; } }
以上函数执行返回1。
例子3
public static int getValue() { int i = 1; try { return i; } finally { i++; } }
函数返回1。对于try或者catch中的return、throw,这两个控制转义指令(return、throw、break 和 continue 都是控制转移语句)返回的变量会被保存到“本地变量表”中,等finally执行完成后,再将之前保存下来的值通过return、throw将值返回到调用者处。以下再看一个类似的例子:
例子4
public static String test() { try { System.out.println("try block"); return test1(); } finally { System.out.println("finally block"); } } public static String test1() { System.out.println("return statement"); return "after return"; }
执行结果
try block return statement finally block
可见,return语句会先执行,但没有马上返回,这时返回值已经确定下来了(保存到了本地变量表中),接着执行finally,最后再返回。【对throw同理】
以上是关于解析Java finally的主要内容,如果未能解决你的问题,请参考以下文章