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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘菲 中级黑马   /  2012-11-20 12:58  /  1489 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘菲 于 2012-11-21 09:49 编辑

视频中老师说,finally中的代码除了遇到system.exit(0)
其它情况下都会被执行。
我写了一个程序,finally中的程序并没有被执行,
这是为什么?

代码:
public class ZhengMing {
        public static void main(String[] args) {
                fanHui f=new fanHui();
                int h=f.zhi();
                System.out.println("h="+h);
               
        }

}

class fanHui
{
         
        public int zhi()
        {
                if(true)
                {
                        return 20;
                }
        
                try
                {
                        
                }
                finally
               
                {
                        System.out.println("finally");
                        return 10;
                        
                }
               
               
        }
}


程序输出结果是:h=20

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
这是因为你的代码在执行到try/catch之前就已经返回掉了,只有在try/catch中执行的代码才会执行finally的代码
回复 使用道具 举报
if(true)
                {
                        return 20;//这里已经返回20了,所以你调用方法的时候,运行到此处,函数就不会往下执行了
                }
      
                try //这里你可以把try(){}finally{}理解为一段语句,老师的意思是说,当执行到try里面的内容的时候,一定会执行finally语句,而现在try根本
                {                                                                    //没有执行到,所以就不会执行finally了,因为上面你已经return20了,你把上面的
                                                                                    //true改为false,就可以执行到了。
                        
                }
                finally
               
                {
                        System.out.println("finally");
                        return 10;
                        
                }

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你看看我这贴自己吧,看可不可以解决~http://bbs.itheima.com/thread-31651-1-1.html
回复 使用道具 举报
冰深 发表于 2012-11-20 13:43
你看看我这贴自己吧,看可不可以解决~http://bbs.itheima.com/thread-31651-1-1.html

好的,谢谢!
回复 使用道具 举报
张学永 发表于 2012-11-20 13:18
if(true)
                {
                        return 20;//这里已经返回20了,所以你调用方法的时 ...

嗯,知道了,谢谢!
回复 使用道具 举报
刘菲 中级黑马 2012-11-20 13:51:42
7#
侯凯斌 发表于 2012-11-20 13:15
这是因为你的代码在执行到try/catch之前就已经返回掉了,只有在try/catch中执行的代码才会执行finally的代码 ...

嗯,知道了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马