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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张海洋 中级黑马   /  2013-3-23 09:08  /  1331 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

5 个回复

倒序浏览
如果抛出异常的语句在return之前,那么return就不会被执行,但finally语句块会执行
如果抛出异常的语句在return之后,那么会直接return而不会抛异常,但finally语句块还是会执行,
不管怎么样finally都会执行.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
异常处理的语句是
  1. try
  2. {
  3.         需要被检测的代码;
  4. }
  5. catch(异常类 变量)
  6. {
  7.         处理异常的代码;(处理方式)
  8. }
  9. finally
  10. {
  11.         一定会执行的语句;
  12. }
复制代码
楼主可以自己写代码测试,如
  1. /*
  2. 需求:
  3. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

  4. */
  5. class Test
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 try
  10.                 {
  11.                         System.out.println("try");
  12.                         return;
  13.                 }
  14.                 catch (Exception e)
  15.                 {
  16.                         System.out.println("catch");
  17.                 }
  18.                 finally
  19.                 {
  20.                         System.out.println("finally");
  21.                 }
  22.         }
  23. }
复制代码
输出结果为
try
finally

说明finally{}无论怎样都执行,是一定要执行的语句。

因为异常处理语句try……catch……finally有个特点,先执行完try{}中的语句直到碰到异常,再执行catch(出现异常时),最后执行finally,
所以return会在finally语句前执行。

希望对楼主有帮助。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
void run()
{
         try
{
       可能出现异常的语句---1;
        return ;
        可能 出现异常的语句---2:
}
catch(Exception)
{
        处理语句---3;
}
finally
   {
      一定会执行的语句---4;
   }
}

可能性1:
如果运行的时候,如果在执行语句1的时候发生了异常,那么return和语句2都不执行了,执行3,和4.顺序为 1-3-4
可能性2:
如果可能运行的时候,语句1没有异常,那就执行return之前去执行语句4, 语句2,3 都不执行。顺序1 -4-return

语句2是如何都执行不到的。  

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
try后的finally {}里的code会执行,比如在关闭IO流的时候,这里的finally就会被执行,还有一种情况,就是程序异常时,可能前面的所有代码都被卡住了,比如在多线程当中,但是这个时候finally当中的代码是一定会被执行的。
回复 使用道具 举报
finally中的代码是一定会被执行的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马