异常之谜

来源:互联网 发布:zyfile.js插件 编辑:程序博客网 时间:2024/05/16 18:59

观看几个程序片段,分析行为

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了。

0 0
原创粉丝点击