黑马程序员技术交流社区

标题: return [打印本页]

作者: 张海洋    时间: 2013-3-23 09:08
标题: return
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
作者: 谭辉    时间: 2013-3-23 09:22
如果抛出异常的语句在return之前,那么return就不会被执行,但finally语句块会执行
如果抛出异常的语句在return之后,那么会直接return而不会抛异常,但finally语句块还是会执行,
不管怎么样finally都会执行.
作者: 丘凤光    时间: 2013-3-23 09:44
异常处理的语句是
  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语句前执行。

希望对楼主有帮助。
作者: 黑马朱超    时间: 2013-3-23 10:16
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是如何都执行不到的。  

作者: 唐永康    时间: 2013-3-23 10:31
try后的finally {}里的code会执行,比如在关闭IO流的时候,这里的finally就会被执行,还有一种情况,就是程序异常时,可能前面的所有代码都被卡住了,比如在多线程当中,但是这个时候finally当中的代码是一定会被执行的。
作者: 张昶    时间: 2013-3-23 11:27
finally中的代码是一定会被执行的.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2