A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

在try{  } catch() {  }finally{  }结构中,finally中的语句总会得到执行(catch语句中有System.exit(0);除外,此时jvm停止运行)。当catch块中有return语句时,会判断是否有finally块,如果有,则先执行finally中的 语句再返回,如果没有,则直接返回。

示例:
注意字符串之间使用‘+’,是表示字符串连接符,会对字符串进行拼接。
class Test {
        // output为全局变量。
        public static String output="";
        public static void foo(int i) {
                try {
                        if(i==1)
                                throw new Exception();        
                        output+="1";
                }  catch(Exception e) {
                        output+="2";
                        return;
                }  finally {
                        output+="3";
                }
                output+="4";
        }
        public static void main(String args[]) {
                foo(0);
                System.out.println(output);//输出134
                foo(1);
                System.out.println(output); //输出13423
        }
}


2 个回复

正序浏览
三分之一 发表于 2015-9-1 14:54
这个不知道怎么出来的,能讲解一下吗?

因为output是全局变量,所以foo(0)结束后output=“134”,执行到foo(1)语句,捕获异常,会执行catch块中的内容,执行完catch块后output="1342",因为有finally块,所以不会立刻返回,而是先执行finally块中的语句再返回,此时output="13423",  注意后面的output=“4”语句是不会执行的,因为执行完finally块就直接返回了,因此最后output=“134223”
回复 使用道具 举报
  1. foo(1);
  2.                 System.out.println(output); //输出13423
复制代码

这个不知道怎么出来的,能讲解一下吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马