黑马程序员技术交流社区

标题: Java基础--Exception使用陷阱(3) [打印本页]

作者: michael_wlq    时间: 2015-9-1 12:00
标题: Java基础--Exception使用陷阱(3)
在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
        }
}



作者: 三分之一    时间: 2015-9-1 14:54
  1. foo(1);
  2.                 System.out.println(output); //输出13423
复制代码

这个不知道怎么出来的,能讲解一下吗?

作者: michael_wlq    时间: 2015-9-1 17:50
三分之一 发表于 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”




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2