黑马程序员技术交流社区

标题: 关于finally中代码一定会被执行的问题 [打印本页]

作者: 刘菲    时间: 2012-11-20 12:58
标题: 关于finally中代码一定会被执行的问题
本帖最后由 刘菲 于 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
作者: 侯凯斌    时间: 2012-11-20 13:15
这是因为你的代码在执行到try/catch之前就已经返回掉了,只有在try/catch中执行的代码才会执行finally的代码
作者: 张学永    时间: 2012-11-20 13:18
if(true)
                {
                        return 20;//这里已经返回20了,所以你调用方法的时候,运行到此处,函数就不会往下执行了
                }
      
                try //这里你可以把try(){}finally{}理解为一段语句,老师的意思是说,当执行到try里面的内容的时候,一定会执行finally语句,而现在try根本
                {                                                                    //没有执行到,所以就不会执行finally了,因为上面你已经return20了,你把上面的
                                                                                    //true改为false,就可以执行到了。
                        
                }
                finally
               
                {
                        System.out.println("finally");
                        return 10;
                        
                }
作者: 冰深    时间: 2012-11-20 13:43
你看看我这贴自己吧,看可不可以解决~http://bbs.itheima.com/thread-31651-1-1.html
作者: 刘菲    时间: 2012-11-20 13:50
冰深 发表于 2012-11-20 13:43
你看看我这贴自己吧,看可不可以解决~http://bbs.itheima.com/thread-31651-1-1.html

好的,谢谢!
作者: 刘菲    时间: 2012-11-20 13:50
张学永 发表于 2012-11-20 13:18
if(true)
                {
                        return 20;//这里已经返回20了,所以你调用方法的时 ...

嗯,知道了,谢谢!
作者: 刘菲    时间: 2012-11-20 13:51
侯凯斌 发表于 2012-11-20 13:15
这是因为你的代码在执行到try/catch之前就已经返回掉了,只有在try/catch中执行的代码才会执行finally的代码 ...

嗯,知道了,谢谢




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