黑马程序员技术交流社区

标题: 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 编辑
  1.         public static int f(){
  2.                 int i=0;
  3.         try{
  4.                        
  5.                         int[]a=new int [3];
  6.                         System.out.println(a[4]);
  7.                         return 0;
  8.                 }
  9.                 catch(Exception e){
  10.                         System.out.println("error");
  11.                        
  12.                         return  ++i;
  13.                        
  14.                        
  15.                 }
  16.                 finally{
  17.                        
  18.                         System.out.println(i);
  19.                        
  20.                 }
  21.                
  22.         }
复制代码
输出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