观看几个程序片段,分析行为
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了。