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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李柯 中级黑马   /  2012-4-14 12:27  /  2268 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果try{}里有一个return语句,那么这个try后的finally{}里的代码会不会被执行,如果执行的话是在return前还是后?

另外如果可以执行的话,那么在try{}中加什么语句finally就不会执行了?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

9 个回复

倒序浏览
  finally语句总是会执行的,准确来说会在return中间执行、
回复 使用道具 举报
finally总是会执行的,除非遇到System.exit这一句,否则它总会执行。
是为了避免程序出现异常情况时来执行一些关闭资源的操作

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
System.exit(0); 这个是退出jvm 仅有的让finilly不执行

简单的例子
class Demo{
        public static void main(String[] args)
        {
       
                method();
               
        }
        public static int method()
        {
                try
                {
                        for (int x =0;x<10 ;x++ )
                        {
                                System.out.println(x);
                        }
                        System.exit(0);
                       
                }
                catch (Exception n)
                {
                       
                }
                finally
                {
                        System.out.println("over");
                }
                return 1;
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
如果try{}里有一个return语句,那么这个try后的finally{}里的代码会不会被执行,如果执行的话是在return前还是后?

finally中的代码还是会被执行,return结束程序之前,会查看是否有finally,如果有,执行完再推出程序,反之,直接推出程序;

另外如果可以执行的话,那么在try{}中加什么语句finally就不会执行了?


貌似不管怎样,都要执行
回复 使用道具 举报
  finally语句是一定会执行的,一般用来关闭资源用的,finally 语句是再try 里面return 语句是中间执行、你一定不需要运行finally语句的话当然是退出虚拟机,System.exit(0);
回复 使用道具 举报
蒋亮 中级黑马 2012-4-14 15:02:04
7#
finally是用来包含一段总是会执行的代码块的,一般用与关闭流、资源什么的,至于是在return语句之前执行还是之后执行,这个我很纠结,有说之前的,有说中间的,但是如果try中有个return 1语句,finally中有个return 2语句,那么最终返回的是2, 1会被覆盖掉,这是不是在之后呢?纠结,望有高手指教一下。
回复 使用道具 举报
毕老师说finally里的语句一般都会执行,即使try里有return语句也会执行。我认为应该是先执行finally里的语句,因为视频里老师说在要执行return语句时会先找finally里有没有语句,如果有先执行finally的语句之后再return。只有当try里有System.exit时才不执行finally的语句。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
除了遇见System(0),其他状况  finally都会执行的。

你只要记住一句话:finally 的天敌只有System(0)。

希望能解决你的疑惑、我们一起加油。
回复 使用道具 举报
除了system.exit强制推出虚拟机外,finally总是会执行的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马