try {
int m = 4/0;
System.out.println(m);
return;
} catch (Exception e) {
System.out.println("catch...");
}finally{
System.out.println("finally...");
}
看到这样一道题,有的同学第一反应是4/0,分母为零,肯定是要抛异常的,那么最终打印输出什么?
A. 什么也没输出
B. 输出 "finally..."
C. 输出 “catch...”
选择A的同学可能会想:4/0,System.out.println(m);不会输出什么,然后接着就return了,代码执行完毕。
选择B的同学可能会想:4/0,System.out.println(m);不会输出什么,finally总要执行,输出"finally...",然后return。
选择C的同学可能会想:4/0,抛出异常,被catch捕获,然后打印输出"catch...",之后return。
结论:A、B、C都是错误的。
分析:4/0,分母为零,抛出异常,被catch捕获,打印输出"catch...",之后执行finally块儿,打印输出"finally...",切记return不会执行
2. 如下代码输出结果为:
try {
int m = 4/2;
System.out.println(m);
return;
} catch (Exception e) {
System.out.println("catch...");
}finally{
System.out.println("finally...");
}
A. 2
B. 2
"finally..."
正确答案B
以上结论,当有try、catch、finally的时候
A. 如果try内没有异常,先执行try,然后执行finally块儿,finally执行完毕,然后执行try内的return(如果有);
B. 如果try内有异常,被catch捕获,执行catch块儿,最后执行finally块儿,完毕
看了上面的两题,下面两题你应该知道结果了吧
3.
try {
int m = 4/0;
System.out.println(m);
System.out.println("try...");
return;
} catch (Exception e) {
System.out.println("catch...");
}finally{
System.out.println("finally...");
}
System.out.println("others...");
return;
输出结果:"catch..." “finally...” "others..."
分析:4/0抛出异常,被catch捕获,打印输出"catch...",然后执行finally块儿,打印输出“finally...”,最后执行执行System.out.println("others...");,切记try内的return是不会被执行,因为在它之前已经抛出异常。
4.
try {
int m = 4/2;
System.out.println(m);
System.out.println("try...");
return;
} catch (Exception e) {
System.out.println("catch...");
}finally{
System.out.println("finally...");
}
System.out.println("others...");
return;
输出结果:2 “try...” "finally..."
分析:不再多说