输出的结果是2,4也就是说在try结构中,虽然使用了return语句强制函数返回,不再往下执行,但实现上finally中的还是执行了。但除了finally外的其它语句不再被执行。
一个更流行的例子是:
import java.io.*; /** * @author Lansine * */ public class Mine { public static void main(String argv[]){ Mine m = new Mine(); try { System.out.println(m.amethod()); } catch (Exception e) { // TODO 自动生成 catch 块 //e.printStackTrace(); System.out.println("我知道了"); } System.out.println("finished"); } public int amethod()throws Exception { try { FileInputStream dis = new FileInputStream("Hello.txt"); // 1,抛出异常 System.out.println("异常发生之后"); } catch (Exception ex) { System.out.println("No such file found"); // 2.catch捕捉异常,并执行 //throw new Exception("上面处理"); return -1; // 4,return 返回 } finally { System.out.println("Doing finally"); // 3.finally一定会执行,在return之前。 } System.out.println("在代码后面"); return 0; } } |
结果是:
No such file found
Doing finally
-1
finished
如果在catch块中抛出异常,则结果为:
No such file found
Doing finally
我知道了
finished
注意:如果异常往上抛直到main函数还没有被catch处理的话,程序将被异常终止。