黑马程序员技术交流社区

标题: finally语句中的代码会不会被执行? [打印本页]

作者: 郑锐    时间: 2013-6-6 13:43
是一定会被执行的。
首先你应该明白try catch与finally的关系,如果try里没有异常或者有异常但是被catch捕获到,那么catch后的普通语句是可以正常运行的,如果try里边有异常但是catch块没有捕获到,那么catch后的普通语句是不会执行的,这时候如果有必须要去执行的语句,那么就最好放在finally中执行。
作者: java冬冬    时间: 2013-6-6 13:45
finally语句只在一种情况下不执行,就是System.exit(0);的时候
显然,楼主的程序中是执行的
作者: w270307032    时间: 2013-6-6 14:20
会被执行到的 这个问题 以前已经有人提问过了 而且据说是张老师的视频里有专门的提出,这个我没考究过,因为我看的也是毕老师的视频
http://bbs.itheima.com/forum.php?mod=viewthread&tid=51412
我觉得这个链接里的这个回答,比较好,通过这段代码测试就一目了然了:
public class TestFinally {
        static int f(){
                int i=1;
                try {
                        System.out.println("try----"+i);
                        return i;
                }
                finally{
                        ++i;
                        System.out.println("finally---"+i);//返回的时候i的值没有变,函数返回后才执行的finally
                        
                }
        }
        public static void main(String[] args){
                System.out.println(f());
        }
}
/*
* try----1
* finally---2
* 1
*/

楼主可以自己看下
作者: 小冰块    时间: 2013-6-6 14:54
除非在此之前遇到System.exit(0);否则一定要被执行,所以finally一般用来关闭资源,保证资源不会被随意占用。
作者: 曾林魁    时间: 2013-6-6 16:05
Java异常处理中的finally语句块是一定会被执行的;除非有一种情况,那就是在try块中或catch块中调用了退出JVM的方法;否则不管在try块、catch块中执行怎样的代码,出现什么样的情况,异常处理的finally块总是被执行。在实际应用中finally经常被用作回收资源用,这里所说的资源一般指物理资源,像数据库连接、网路连接,磁盘文件等;还有点要提醒你的是Java的垃圾回收机制不会回收任何的物理资源,垃圾回收只回收对内存中的对象所占用的资源!
作者: 李玉江    时间: 2013-6-6 17:23
try中的和finally中的都会执行  只不过返回的是try中的数据罢了。但如果finally中的是return++x呢     这样的情况就会覆盖掉try中的数据   你可以写一个输出语句来验证的
作者: Sword    时间: 2013-6-6 19:01
请楼主注册后在发帖,注册最好写真实的姓名,谢谢合作
作者: 黑马一刘昭    时间: 2013-6-7 22:59
肯定会被执行,因为一异常处理时,try catch finally,其中finally是一定会被执行的代码部分,除非遇到System.ext(0)这种情况,虚拟机会停止运行,才不会被执行!
作者: 黑马一刘昭    时间: 2013-6-7 23:00
但是对于你这个题目而言,结果是1,因为再运行++x的时候已经返回了,这时候x的值为2,但是输出的还是刚才的1。
作者: 王林涛    时间: 2013-6-9 08:31
当然可以被执行到的,因为你try(需要处理的异常代码),因为你没有异常,所以finlly是必须要执行的
作者: 袁梦希    时间: 2013-6-9 14:47
匿名黑马伤不起
作者: 袁梦希    时间: 2013-6-9 14:47
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
作者: 孙百鑫    时间: 2013-6-22 00:47
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




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