黑马程序员技术交流社区
标题:
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
foo(1);
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