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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄敏文 黑马帝   /  2011-8-22 19:04  /  3737 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

见书上说的finally语句块无论在任何情况下都是会被执行到的,可是下面的代码中的finally语句块确没有执行到[code=java]public class TestFinally {
        public static void main(String[] args) {
                try {
                        System.out.println("try");
                        System.exit(0);
                } catch (Exception e) {
                        System.out.println("catch");
                } finally {
                        System.out.println("finally");
                }
        }
}[/code]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
黑马网友  发表于 2011-8-22 19:09:20
沙发
API文档上描述System.exit方法会导致当前运行线程停止并使其它线程都终止,因此上面这段代码中的finally代码块不会被执行
回复 使用道具 举报
黑马网友  发表于 2011-8-22 21:40:14
藤椅
因为在try语句块中有了exit,exit会直接结束这个程序
回复 使用道具 举报
黑马网友  发表于 2011-8-22 23:17:38
板凳
那finally语句块无论在任何情况下都是会被执行到的这句话有错误吧
回复 使用道具 举报
黑马网友  发表于 2011-8-22 23:24:45
报纸
照你这么说,电脑当机,停电,病毒入侵……都可以否定这句话了
回复 使用道具 举报
黑马网友  发表于 2011-8-25 15:49:54
地板
俺的书上说任何情况下都必须执行的代码,就跟晚上回家打开门 必须要关门一样,虽然必须,但可以不关门,而finally不被执行的唯一情况就是先执行了System.exit()方法。也就是出了意外,嘿嘿
回复 使用道具 举报
黑马网友  发表于 2011-8-25 19:13:30
7#
System.exit()方法使得finally语句不能执行,特殊情况呗
回复 使用道具 举报
黑马网友  发表于 2011-8-26 10:04:42
8#
finally块里的代码无论try块中是否发生异常都会执行这是一般的说法,不是绝对的,发生下面情况是finally块将不会被执行:finally块中发生了异常;程序所在线程死亡;在前面代码中用到System.exit();关闭CPU;你的代码中出现System.exit(),程序退出,finally块当然无法运行。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 很好!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-27 00:07:36
9#
当使用java命令执行一个类的时候,就会启动一个JVM,即java虚拟机,从而加载并执行这个类。
api文档中对exit(int status)方法的描述为:Terminates the currently running Java Virtual Machine
即是说调用该方法会系统会终止当前正在运行的java虚拟机,当在try语句块中执行System.exit(0)这条语句时,系统会立即终止java虚拟机,java虚拟机都不运行了,当然不可能继续往下执行finally语句块了。

     当然你所说的finally语句块无论在任何情况下都是会被执行到的,其实是不严谨的,说这句话应该有一个前提就是当程序产生异常是能够程序本身所处理的,而上述情况是强制终止了JVM。

     回答完毕。。。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 回答的不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-29 15:35:57
10#
这道题目我已经2次面试碰到了,当时的确是不知道exit()。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马