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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 到处玩的 于 2014-8-10 19:39 编辑

下面的程序代码输出的结果是:finally块,那就能表明finally中的return是先于try中的return执行吗?

package com.tops.aug08;

public class Test {
        public String get(){
       
                try        {
                        return "try块";
                }
                finally{
                        return "finally块";
                }
        }
        public static void main(String args[]) {
                Test t = new Test();
                String str = t.get();
                System.out.println(str);
        }
}



4 个回复

倒序浏览
finally 块的return 先执行吧,因为在try中,只要碰到return 就会看有没有finally块,有的话就执行finally块的语句,然后才执行try中的return

点评

那能解释下上面代码运行结果的原因吗  发表于 2014-8-10 19:37
回复 使用道具 举报
try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块)。
在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachable code,编译不会通过),最终会执行的return应该是finally中的return,因为其他位置遇到return时候,先把其值反馈给虚拟机,会检测是否有finally语句,有则执行,而finally中有return则会使程序结束。也就是finally中的return会覆盖掉其它位置的return。

点评

这就应该能解释上面的运行结果了  发表于 2014-8-10 19:40
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马