黑马程序员技术交流社区
标题:
关于try...catch语句,以及在try...catch中使用retrun语句
[打印本页]
作者:
247033993@qq.co
时间:
2014-5-23 23:09
标题:
关于try...catch语句,以及在try...catch中使用retrun语句
在论坛看到一个同学问到有关try...catch语句的相关问题,这个还是一个比较有趣的,原题如下
public static void main(String[] args) {
System.out.println(getInt());
}
private static int getInt() {
int x = 10;
try {
x = 20;
System.out.println(x / 0);
x = 30;
} catch (ArithmeticException e) {
x = 40;
return x; } finally {
x = 50;
}
return x;
复制代码
他问结果是多少
这是一个try...catch有代表意义的题目,
这涉及到try...catch语句的执行顺序问题
try{
//1:抛出异常的代码
//2:代码
}catch(){
//3:代码
//4:抛出异常
}finally{
//5:代码
}
//6:代码
复制代码
首先finally语句,是不管try是否抛出异常,finally语句块都会执行
其次,这个语句执行顺序会有几种情况:
第一种大的情况:try语句块没有抛出异常,则程序会执行try,finally以及finally块之后的代码;
第二种大的情况:try语句块抛出了异常并且catch有匹配的异常。当遇到try里面抛出的异常后,try块里面剩下的代码就不执行了,跳转到catch块里面。
这里又可以分为2种情况。第一种,抛出的异常被后面的catch捕获,而catch又没有抛出新的异常,那么执行顺序是1,3,5,6 ;第二种,如果catch里面又抛出新的异常,顺序是1,3,4,5,然后将新的异常返回给方法调用者,6就不执行了;
第三种大的情况:try语句块抛出了异常,但是后面的catch没有能匹配的异常。那么会执行try和finally里面的语句也就是1,5,然后将该异常返回给方法调用者,不执行6 。
那么实例中
System.out.println(x / 0);
复制代码
这一句将抛出异常,并且被catch捕获,并且在执行到catch时候将x重新赋值,并返回。而此时又涉及到在try..catch中使用return语句
如果在try语句中有return语句时,finally语句是在return语句前执行的,而且finally语句不能改变return的返回值,finally语句中不应含有return语句
所以分析之后,结果应该是40 个人理解,不当之处,请各位大神赐教
作者:
远行的人2号
时间:
2014-5-24 02:09
讲解地很好哦!
作者:
Ф福@ 御
时间:
2014-5-24 10:47
给力,讲解的不错
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2