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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

假如在捕获异常的try块中调用return,还会执行finally吗

23 个回复

正序浏览
本帖最后由 郑飞 于 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中的语句!
程序结束!


回复 使用道具 举报
careit 发表于 2014-9-15 21:44
点开图片一块就明白了e
代码也附上

thank you very much
回复 使用道具 举报
finally就表示一定会执行的
通常用于关闭资源或者执行一些必须执行的代码
回复 使用道具 举报
除非try里执行到了 System.exit(0);
回复 使用道具 举报
finally 是必须会执行的代码 所以 不管try 有没有执行完 finally是一定会执行的
回复 使用道具 举报
谢建平 发表于 2014-9-16 08:26
肯定的告诉 你  除了 System.exit(0);   要不都会执行

很肯定的告诉你,这句话毕老师说过
回复 使用道具 举报
lipc 发表于 2014-9-16 17:34
多谢   。。。

一起学习
在回复中重温
回复 使用道具 举报
谢建平 发表于 2014-9-16 08:26
肯定的告诉 你  除了 System.exit(0);   要不都会执行

除了System.exit(0) 之外 都会执行finally语句,然后才是执行return。
回复 使用道具 举报
lipc 中级黑马 2014-9-16 17:34:29
16#
careit 发表于 2014-9-15 21:44
点开图片一块就明白了e
代码也附上

多谢:lol   。。。
回复 使用道具 举报
ooEye 中级黑马 2014-9-16 13:34:00
15#
会执行,我的理解是出现异常和return都是要跳出try代码块的,所以finally一定会执行
回复 使用道具 举报
MeryStyle 来自手机 中级黑马 2014-9-16 13:28:26
14#
只要是try块的代码执行了,就一定会执行后面的finally块代码的。,,,最后两句代码不可达吧~
回复 使用道具 举报
会执行,你找个例子测试下就明白了
回复 使用道具 举报
cherry@cookie 来自手机 中级黑马 2014-9-16 11:17:49
12#
楼上正解!
回复 使用道具 举报
视频有说,finally是一定会执行的部分
回复 使用道具 举报
finally是什么意思,你告诉我,其实我也不知道,经过我有道翻译我发现原来是“最后”的意思,这样这个问题就豁然开朗了。“最后”顾名思义就是某件事的结尾,就是这件事要结束就必须要经过这个“最后”。如果某个动作都没有执行,那么它就没资格称为最后。故答案是要执行。
回复 使用道具 举报
zhappy 发表于 2014-9-16 08:37
不会,return直接跳出try块了。

除了System.exit(0)退出,其他情况都会执行
回复 使用道具 举报
会的!!!!
回复 使用道具 举报
daoqin 高级黑马 2014-9-16 08:57:22
7#
一定会执行,因为如此设计的
回复 使用道具 举报
还没学到这一块
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马