黑马程序员技术交流社区

标题: 关于finally的问题 [打印本页]

作者: 程旦    时间: 2012-3-30 12:08
标题: 关于finally的问题
public class Test {
        public static void main(String[] args) {
                System.out.println(decision());
        }
        public static boolean decision(){
                try{return true;}finally{return false;}}

}
这段代码的运行结果是 false  但是 finally里面的代码不是一定要执行的吗??????
作者: 陈明    时间: 2012-3-30 12:16
你finally返回的就是是false啊!~结果是false啊!不矛盾吧?
作者: 陈明    时间: 2012-3-30 12:22
补充:你想要不执行finally 里面的内容 有一个办法  就是system.exit(0); (系统退出  jvm结束);
作者: 肖发腾    时间: 2012-3-30 12:30

好像有一位高手验证过,return true的true 是被放在了内存中,并没有立刻返回,当执行完finally后再返回,
恰巧,finally中也有返回,那么finally中的返回false覆盖了内存中的true。。。

  这样的解释楼主明白了么
作者: 李井山    时间: 2012-3-30 12:47
ffinally一定要执行,decision()方法try{return true;}完成后,方法没结束,继续向下执行,就执行到了finally{return false;}},可理解为后面的把前面的覆盖了!
作者: 郑洋洋    时间: 2012-3-30 12:52
结果很对嘛,你就是因为执行了finally代码块里程序了,返回结果才为false
作者: 方江    时间: 2012-3-30 17:41
finally是最终执行,也就是说,无论你上面条件在真,你最终执行的是假,他返回的肯定是假。你就是上面没有判断,他也返回的 是假。fanlly除非程序挂了才不执行,不然你这样写,他终究是会执行的,该来的总会来的

作者: 胡川    时间: 2012-3-30 18:09
finally是不管什么样的情况都会执行它后面的代码块的,return的话也会执行的,除非上面代码快遇到
System.exit(0),才会直接退出,不执行finally的语句




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