黑马程序员技术交流社区
标题:
try{}问题
[打印本页]
作者:
唐溪永
时间:
2012-2-20 21:17
标题:
try{}问题
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
作者:
陈伟
时间:
2012-2-20 21:51
肯定执行了
你在finally里加一条输出语句你就知道了
在try语句中,在执行return语句时,要返回的结果已经准备好了,
就在此时,程序转到finally执行了。
作者:
马胜平
时间:
2012-2-20 21:52
本帖最后由 马胜平 于 2012-2-20 22:01 编辑
public static int f(){
int i=0;
try{
int[]a=new int [3];
System.out.println(a[4]);
return 0;
}
catch(Exception e){
System.out.println("error");
return ++i;
}
finally{
System.out.println(i);
}
}
复制代码
输出I的值是1说明return执行了
作者:
何招俊
时间:
2012-2-20 21:57
finally{}里的code一般情况下是会被执行的,只有当catch捕获到了异常,并且catch clause中存在System.exit(0);被执行,那么finally clause中的代码就不会被执行了
作者:
李会启
时间:
2012-2-21 12:40
在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是 finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。
作者:
胡威
时间:
2012-2-21 12:54
一般如果try和catch{}中都不存在System.exit(0)时,即使try里面有return,finally里的code也会在在return之前先执行,然后紧接着执行return语句。可是如果存在System.exit(0),表示JVM停止运行,连虚拟机都不运行了,代码就都不被执行了。
作者:
雷楚光
时间:
2012-2-21 14:17
我觉得应该是这样的吧:执行是肯定的,他先执行try return一个结果,再执行catch(如果catch又得话),最后执行finally。
因为无论try还是catch有System.exit(0)语句的话,finally是不会被执行的。
那么可以认为finally是最后执行的。
作者:
dangfei
时间:
2012-2-21 14:27
finally无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你在try块内用return返回了,在返回前,finally总是要执行,能够在异常处理最后做一些清理工作。如关闭数据库连接等等
作者:
雷楚光
时间:
2012-2-21 14:28
本帖最后由 雷楚光 于 2012-2-21 14:43 编辑
当try里面出现异常时,是不是可以理解,return 一个异常 这个异常被 catch接受处理?
作者:
杨曾荣
时间:
2012-2-21 16:55
在try 或者catch中如果遇到return 语句,程序就会转入finally语句,如果finally中没有return,程序返回的是try中return的值,而finally中的代码是必须要执行的,而且是在return前执行
作者:
花开~的季节
时间:
2012-2-21 17:33
return只挑出try{}finally照样执行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2