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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程旦 中级黑马   /  2012-3-30 12:08  /  2312 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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里面的代码不是一定要执行的吗??????

7 个回复

正序浏览
胡川 中级黑马 2012-3-30 18:09:19
8#
finally是不管什么样的情况都会执行它后面的代码块的,return的话也会执行的,除非上面代码快遇到
System.exit(0),才会直接退出,不执行finally的语句
回复 使用道具 举报
方江 中级黑马 2012-3-30 17:41:50
7#
finally是最终执行,也就是说,无论你上面条件在真,你最终执行的是假,他返回的肯定是假。你就是上面没有判断,他也返回的 是假。fanlly除非程序挂了才不执行,不然你这样写,他终究是会执行的,该来的总会来的
回复 使用道具 举报
结果很对嘛,你就是因为执行了finally代码块里程序了,返回结果才为false
回复 使用道具 举报
ffinally一定要执行,decision()方法try{return true;}完成后,方法没结束,继续向下执行,就执行到了finally{return false;}},可理解为后面的把前面的覆盖了!
回复 使用道具 举报

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

  这样的解释楼主明白了么
回复 使用道具 举报
补充:你想要不执行finally 里面的内容 有一个办法  就是system.exit(0); (系统退出  jvm结束);
回复 使用道具 举报
你finally返回的就是是false啊!~结果是false啊!不矛盾吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马