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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 玉遥 中级黑马   /  2014-7-12 23:03  /  1572 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

A:在catch里面有return的情况下,finally里面的代码还执行吗?如果执行,请问在return前还是后。
会,在return中间。
B: 请输出下列程序的结果
public class FinallyTest {
       public static void main(String[] args) {
              System.out.println(method2());
       }            
       private static int method2() {
              int x = 10;
              try {
                     System.out.println(x / 0);
                     x = 20;
              } catch (ArithmeticException e) {
                     x = 30;
                     return x;
              } finally {
                     x = 40;
              }
              return x;
       }
//结果30
怎么理解呢?
第一次执行到return x;的时候,在内存中已经形成了一个返回路径,这次记录的值:return 30;
接着,finally执行,x=40
最后,第二次执行return的时候,就直接返回了return 30

10 个回复

倒序浏览
A  catch里面有return的情况下,finally里面的代码还执行吗  
    执行 因为trturn是结束函数功能 而finally是一定会执行的

B   首先 x 是个局部变量 有生命周期的
    因为发生了异常 执行catch   teturn x返回30   此时 x已经压栈了
    由于还没执行到调用输出语句 x 还有生命
    在执行finally   x = 40 ; x 生命结束; 返回先压栈的30
    所以打印 x = 30;
    注意 最后一个return 是不会执行到的 应为上一个return已经 结束了函数

如果把System.out.println(x / 2); 修改
catch 不会执行
最后一个return 会返回 40
希望对你有帮助!!!!!
回复 使用道具 举报
葛生辉 发表于 2014-7-13 13:04
A  catch里面有return的情况下,finally里面的代码还执行吗  
    执行 因为trturn是结束函数功能 而finall ...

对我也有帮助,谢谢
回复 使用道具 举报
葛生辉 发表于 2014-7-13 13:04
A  catch里面有return的情况下,finally里面的代码还执行吗  
    执行 因为trturn是结束函数功能 而finall ...

多谢 很有帮助!
回复 使用道具 举报
有帮助;
回复 使用道具 举报
多谢多谢。学到了
回复 使用道具 举报
又学习了
回复 使用道具 举报
30                     
回复 使用道具 举报
刚刚写了一个这方面的贴了
http://bbs.itheima.com/thread-129360-1-1.html
回复 使用道具 举报
在catch里面写System.exit(0);系统退出,finally后的就不在执行了
回复 使用道具 举报
受教了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马