黑马程序员技术交流社区
标题:
测测你的Java异常到底学得怎样
[打印本页]
作者:
jojo
时间:
2015-1-9 19:43
标题:
测测你的Java异常到底学得怎样
本帖最后由 jojo 于 2015-1-10 16:30 编辑
据说能够正确分析出下面这道程序的输出就证明你的Java异常完全没有任何问题了。本以为自己学得还可以,结果瞬间被秒杀了,有兴趣的童鞋可以试试。答案我会附在最后面。
public class TestException {
public TestException() {
}
boolean testEx() throws Exception {
boolean ret = true;
try {
ret = testEx1();
} catch (Exception e) {
System.out.println("testEx, catch exception");
ret = false;
throw e;
} finally {
System.out.println("testEx, finally; return value=" + ret);
return ret;
}
}
boolean testEx1() throws Exception {
boolean ret = true;
try {
ret = testEx2();
if (!ret) {
return false;
}
System.out.println("testEx1, at the end of try");
return ret;
} catch (Exception e) {
System.out.println("testEx1, catch exception");
ret = false;
throw e;
} finally {
System.out.println("testEx1, finally; return value=" + ret);
return ret;
}
}
boolean testEx2() throws Exception {
boolean ret = true;
try {
int b = 12;
int c;
for (int i = 2; i >= -2; i--) {
c = b / i;
System.out.println("i=" + i);
}
return true;
} catch (Exception e) {
System.out.println("testEx2, catch exception");
ret = false;
throw e;
} finally {
System.out.println("testEx2, finally; return value=" + ret);
return ret;
}
}
public static void main(String[] args) {
TestException testException1 = new TestException();
try {
testException1.testEx();
} catch (Exception e) {
e.printStackTrace();
}
}
}
复制代码
答案:
i=2
i=1
testEx2, catch exception
testEx2, finally; return value=false
testEx1, finally; return value=false
testEx, finally; return value=false
作者:
xiaoyi
时间:
2015-1-9 20:13
看不懂,求指导
作者:
李忠兵
时间:
2015-1-9 20:41
我擦,我的第三和第四步搞反了
作者:
jojo
时间:
2015-1-10 10:01
李忠兵 发表于 2015-1-9 20:41
我擦,我的第三和第四步搞反了
我的打印输出是多了几个,所以才想知道正解是如何出来的
作者:
biweibiren
时间:
2015-1-10 16:07
finally是肯定会被执行到的(不知道什么原理,记住就好)。
finally的块中有return语句,那么catch中的throw或是return 语句不会被执行。有一点要注意的是,如果catch语句中有return x=1这样的语句,那么x会被赋值为1。
相当于在catch中程序到了throw或return之后就不动了,转而去执行finally,然后回过头来执行catch中的throw和return语句。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2