try、catch&finally的执行顺序
这篇文章主要讨论的是try、catch、finally模块的执行顺序。先看下面一个例子:?public static String doTrySeq(){
??
??try {??
??????????? System.out.println("try");????????? //1
??????????? int i = 12/0;???????????????????????????? //2????????????//System.out.println("It's the next step after throwed exception");?? //8
??????????? return "try";???????????????????????????? //3
??????? }catch(Exception e){
??????? ?System.out.println("catch");??????? //4
??????????? return "catch";???????????????????????? //5
??????? }
??finally {??
??????????? System.out.println("finally");???? //6
??????????? return "finally";???????????????????????? //7
??????? }?? ????????//return?"out";?????????????????????????????? //9
?}?public static void main(String[] args) {
??System.out.println("where return? " + doTrySeq());
}??输出结果:try
catch
finally
where return? finally??执行顺序如下:1)先执行1、2,在2处抛出异常,跳到catch代码块(此时跳过了3)2)执行4、5。这里很多人认为执行return,所以直接退出并返回值。但事实并不是的,在java中,try、catch,无论执行了什么代码,最后都必须进入finally代码块。(当然,你如果用System.exit(0);这个是系统强制退出,没辙,肯定会退出去,不会执行下面的finally)3)执行6、7,执行到7时,这时finally代码已经执行完,本应该跳回try继续下一步,但因为finally代码块中有return,所以退出方法并返回了“finally”??下面将注释catch和finally中的return,即注释掉5、7,取消8、9的注释执行结果为:try
catch
finally
where return? out?在执行2时,抛异常,这时跳到catch代码块,再执行finally代码块,之后跳出方法,执行9可以看出,try中如果抛异常,程序会跳出对应的try-catch-finally模块,而出现异常的代码句下面的代码将不会被执行