黑马程序员技术交流社区

标题: try{]finally{}问题? [打印本页]

作者: 李柯    时间: 2012-4-14 12:27
标题: try{]finally{}问题?
如果try{}里有一个return语句,那么这个try后的finally{}里的代码会不会被执行,如果执行的话是在return前还是后?

另外如果可以执行的话,那么在try{}中加什么语句finally就不会执行了?
作者: 李震 李震 李震    时间: 2012-4-14 12:43
  finally语句总是会执行的,准确来说会在return中间执行、
作者: 刘占月    时间: 2012-4-14 13:08
finally总是会执行的,除非遇到System.exit这一句,否则它总会执行。
是为了避免程序出现异常情况时来执行一些关闭资源的操作

作者: 马强    时间: 2012-4-14 13:14
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;
        }
}


作者: 孙国军    时间: 2012-4-14 13:45
如果try{}里有一个return语句,那么这个try后的finally{}里的代码会不会被执行,如果执行的话是在return前还是后?

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

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


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

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

希望能解决你的疑惑、我们一起加油。
作者: 韩新凯    时间: 2012-4-14 22:46
除了system.exit强制推出虚拟机外,finally总是会执行的。




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