黑马程序员技术交流社区

标题: finally中的return和try中的return谁先执行 [打印本页]

作者: 到处玩的    时间: 2014-8-10 12:40
标题: finally中的return和try中的return谁先执行
本帖最后由 到处玩的 于 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);
        }
}




作者: 舍我其谁    时间: 2014-8-10 12:50
finally 块的return 先执行吧,因为在try中,只要碰到return 就会看有没有finally块,有的话就执行finally块的语句,然后才执行try中的return
作者: jiangweibin2573    时间: 2014-8-10 13:16
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。




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