A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐溪永 黑马帝   /  2012-2-20 21:17  /  3026 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

11 个回复

倒序浏览
肯定执行了
你在finally里加一条输出语句你就知道了
在try语句中,在执行return语句时,要返回的结果已经准备好了,
就在此时,程序转到finally执行了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 马胜平 于 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执行了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
其实,return是跳出try然后会执行finally里面的语句,你最好在finally里面放上两个输出句话自己感受下
回复 使用道具 举报
finally{}里的code一般情况下是会被执行的,只有当catch捕获到了异常,并且catch clause中存在System.exit(0);被执行,那么finally clause中的代码就不会被执行了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是 finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
胡威 黑马帝 2012-2-21 12:54:58
7#
一般如果try和catch{}中都不存在System.exit(0)时,即使try里面有return,finally里的code也会在在return之前先执行,然后紧接着执行return语句。可是如果存在System.exit(0),表示JVM停止运行,连虚拟机都不运行了,代码就都不被执行了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我觉得应该是这样的吧:执行是肯定的,他先执行try return一个结果,再执行catch(如果catch又得话),最后执行finally。
因为无论try还是catch有System.exit(0)语句的话,finally是不会被执行的。
那么可以认为finally是最后执行的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
finally无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你在try块内用return返回了,在返回前,finally总是要执行,能够在异常处理最后做一些清理工作。如关闭数据库连接等等
回复 使用道具 举报
本帖最后由 雷楚光 于 2012-2-21 14:43 编辑

当try里面出现异常时,是不是可以理解,return 一个异常 这个异常被 catch接受处理?
回复 使用道具 举报
在try 或者catch中如果遇到return 语句,程序就会转入finally语句,如果finally中没有return,程序返回的是try中return的值,而finally中的代码是必须要执行的,而且是在return前执行
回复 使用道具 举报
return只挑出try{}finally照样执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马