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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

                                                 用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?

public class Test7 {
            public static void main(String[] args){  
                System.out.println(test());  
            }  
            //自定义一个test测试函数  
            public static boolean test(){  
                try{  
                    //用来检测try块里面处于return前的语句是否有被执行  
                    System.out.println("执行的是try");  
                    return false;  
                }  
                finally{      
                    //用来检测finally语句块中的语句有没有被执行  
                    System.out.println("执行的是finally");  
                    //return true;  
                }         
            }  
        }
        /*程序最后运行的结果是:
        执行的是try
        执行的是finally
        true  
        通过程序的运行结果可以看出,try中的return语句并没有被执行。
        如果我注释掉finally语句块中return语句,程序的运行结果又会是什么样的呢?


        [java] view plaincopy在CODE上查看代码片派生到我的代码片
        执行的是try  
        执行的是finally
        false  


        通过这两个运行结果的不同,我们不难得出结论
        当java程序在执行try块、catch块时如果遇到了return或者throw时,这两个语句都会导致该方法立即结束,但是系统在执行这两个语句时并不会结束该方法,而是去寻找该异常处理流中是否包含了finally语句块,如果没有finally块,则程序会立即执行return或者throw语句,方法终止。如果有finally语句块,系统会开始立即执行finally语句块,只有当finally语句块中的代码被执行完了之后,系统才会回来再次执行try块或者catch块中的return或throw语句,但是如果finally块中也有return或者throw这样能是方法结束的语句,则finally块就会立即结束该方法,系统将不会跳回去执行try块或者catch中的任何语句。



        所以在注释掉finally块中的return语句后,程序再次跳到了try中的return语句,最后结果返回了false。
}
        */

1 个回复

倒序浏览
每次提到这个问题,我就会想到 System.exit(10);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马