观看几个程序片段,分析行为
1、
<pre name="code" class="java"><span style="font-size:18px;">public static boolean fun(){ try{ return false; }finally{ return true; } } System.out.println(fun());</span>
2、
<span style="font-size:18px;">public static boolean fun(){ try{ return false; }finally{ System.out.println("finally"); } } System.out.println(fun());</span>
3、
<span style="font-size:18px;">public static void fun(){ try{ System.out.println("try"); System.exit(0); }finally{ System.out.println("finally"); } } fun();</span>
结果:
1、true
2、finally
false
3、try
可以看到return,finally,exit的组合会出现不同的情况,分析finally块是何时发生的。
try-finally语句中,finally语句块总是控制权离开try语句块时发生,无论try语句块时正常结束,还是意外结束。
意外情况:
1、抛出异常
2、封闭型语句执行了break,continue
3、出现return
那么exit算不算呢?应该算吧,毕竟它阻止了程序的顺序执行。
其实不是的。因为exit方法将要停止当前线程和所有其他当场死忙的线程,也就是说exit直接把try-finally的执行环境都灭了,更不要说把执行权给finally了。
原文地址:http://blog.csdn.net/havedream_one/article/details/45043049