黑马程序员技术交流社区

标题: 假如在捕获异常的try块中调用return,还会执行finally吗 [打印本页]

作者: lipc    时间: 2014-9-15 21:24
标题: 假如在捕获异常的try块中调用return,还会执行finally吗
假如在捕获异常的try块中调用return,还会执行finally吗
作者: careit    时间: 2014-9-15 21:44
点开图片一块就明白了e
代码也附上

  1. public class Try_Catach_Finally {
  2.         public static void main(String[] args) {
  3.                 System.out.println(method(null));
  4.         }
  5.         public static int method(String[] args) {
  6.                 try {
  7.                         int i=1/0;
  8.                         return 0;
  9.                 } catch (Exception e) {
  10.                         System.out.println("run in catch");
  11. //                        return 2;``
  12.                 }finally{
  13.                         System.out.println("run in finally");
  14.                 }
  15.                 System.out.println("run in over");
  16.                 return 1;
  17.         }
  18. }
复制代码

其实自己写一个简单Demo就明白
finally  在任何情况下都要执行
如果在finally 之前有rerun value;执行   看清一定是执行哦,仅仅存在还不行,必须在程序运行过程中执行了,在执行完finally之后才不会继续执行

2014-09-15_214044.png (107.03 KB, 下载次数: 140)

2014-09-15_214044.png

2014-09-15_213805.png (114.12 KB, 下载次数: 137)

2014-09-15_213805.png

作者: 谢建平    时间: 2014-9-16 08:26
肯定的告诉 你  除了 System.exit(0);   要不都会执行
作者: zhappy    时间: 2014-9-16 08:37
不会,return直接跳出try块了。
作者: 海燕    时间: 2014-9-16 08:42
finally语句在return语句之后执行,在return返回之前执行。黑马视频上有讲的哦,应该是基础的异常处理那块
作者: Magic飘零    时间: 2014-9-16 08:44
还没学到这一块
作者: daoqin    时间: 2014-9-16 08:57
一定会执行,因为如此设计的
作者: zht123zht    时间: 2014-9-16 08:59
会的!!!!
作者: 戏言丶    时间: 2014-9-16 09:39
zhappy 发表于 2014-9-16 08:37
不会,return直接跳出try块了。

除了System.exit(0)退出,其他情况都会执行
作者: ItJack    时间: 2014-9-16 10:10
finally是什么意思,你告诉我,其实我也不知道,经过我有道翻译我发现原来是“最后”的意思,这样这个问题就豁然开朗了。“最后”顾名思义就是某件事的结尾,就是这件事要结束就必须要经过这个“最后”。如果某个动作都没有执行,那么它就没资格称为最后。故答案是要执行。
作者: 逍遥呆    时间: 2014-9-16 10:12
视频有说,finally是一定会执行的部分
作者: cherry@cookie    时间: 2014-9-16 11:17
楼上正解!
作者: limengpiao    时间: 2014-9-16 11:22
会执行,你找个例子测试下就明白了
作者: MeryStyle    时间: 2014-9-16 13:28
只要是try块的代码执行了,就一定会执行后面的finally块代码的。,,,最后两句代码不可达吧~
作者: ooEye    时间: 2014-9-16 13:34
会执行,我的理解是出现异常和return都是要跳出try代码块的,所以finally一定会执行
作者: lipc    时间: 2014-9-16 17:34
careit 发表于 2014-9-15 21:44
点开图片一块就明白了e
代码也附上

多谢:lol   。。。
作者: Allencheng    时间: 2014-9-16 21:31
谢建平 发表于 2014-9-16 08:26
肯定的告诉 你  除了 System.exit(0);   要不都会执行

除了System.exit(0) 之外 都会执行finally语句,然后才是执行return。
作者: careit    时间: 2014-9-17 11:34
lipc 发表于 2014-9-16 17:34
多谢   。。。

一起学习
在回复中重温
作者: 菜鸟一号    时间: 2014-9-17 11:42
谢建平 发表于 2014-9-16 08:26
肯定的告诉 你  除了 System.exit(0);   要不都会执行

很肯定的告诉你,这句话毕老师说过
作者: 梦里听传说    时间: 2014-9-17 12:35
finally 是必须会执行的代码 所以 不管try 有没有执行完 finally是一定会执行的
作者: 梦里听传说    时间: 2014-9-17 12:37
除非try里执行到了 System.exit(0);
作者: 不喜欢么    时间: 2014-9-17 14:37
finally就表示一定会执行的
通常用于关闭资源或者执行一些必须执行的代码
作者: careit    时间: 2014-9-17 22:53
careit 发表于 2014-9-15 21:44
点开图片一块就明白了e
代码也附上

thank you very much
作者: 郑飞    时间: 2014-9-18 04:59
本帖最后由 郑飞 于 2014-9-18 05:03 编辑
  1. /*
  2. 需求:用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?

  3. 思路:1;定义带返回值为字符串的方法,在方法中使用try catch finally语句

  4.           2:在这3个语句段里写入控制台输出语句 便于判断进入语句段的顺序

  5.           3:让try中的return 的同时出现异常 并捕获打印到控制台 便于判断return执行的时间点

  6.           4;有了第3步 就可以方便判断return与finally执行的顺序了
  7. */
  8. class Test7
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 System.out.println(test());
  13.         }

  14.         public static String test()
  15.         {
  16.                 System.out.println("程序运行!");
  17.                 try
  18.                 {
  19.                         System.out.println("开始执行try中的语句!");//开始运行try代码段

  20.                         try
  21.                         {
  22.                                 return 3/0+"";        
  23.                         }
  24.                         catch (Exception e)
  25.                         {
  26.                                 System.out.println("由于return中有意让3除0,此处捕获异常成功,说明return已执行!");
  27.                         }
  28.                 }
  29.                 catch (ArithmeticException e)
  30.                 {
  31.                         System.out.println(e.toString());
  32.                 }
  33.                 finally
  34.                 {
  35.                         System.out.println("执行finally中的语句!");//打印语句 说明执行了finally语句
  36.                 }
  37.                 return "程序结束!"; //程序完整需要 就写了个返回值
  38.         }
  39. }
复制代码
程序运行!开始执行try中的语句!
由于return中有意让3除0,此处捕获异常成功,说明return已经执行!
执行finally中的语句!
程序结束!







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