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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 浩南酷酷 中级黑马   /  2014-2-16 15:30  /  1546 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Run {
        public static void func() throws Exception//throws Exception
        {
                try
                {
                        throw  new Exception();
                }
                finally
                {
                        System.out.println("B");
                }
        }
        public static void main(String[] args)
        {
                try
                {
                        func();
                        System.out.println("A");
                }
                catch(Exception e)
                {
                        System.out.println("C");
                }
                System.out.println("D");
        }
}
为什么结果是 B C D 呢?求大哥帮忙解释下

点评

这个是视频上的题吧  发表于 2014-2-16 20:17

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 好好学习!

查看全部评分

8 个回复

倒序浏览
本帖最后由 奋斗的小胖子 于 2014-2-16 15:43 编辑
  1. <p>   public static void func() throws Exception//throws Exception
  2.     {
  3.             try
  4.             {
  5.                     
  6.                     throw  new Exception();//第二步 ,因为抛出了异常,但是这个方法里没有catch
  7.             }
  8.             finally
  9.             {
  10.                     System.out.println("B");//第三步这个方法不管你又没有异常都要走这一步,fun方法走完  ,B是第一输出的
  11.             }
  12.     }
  13.     public static void main(String[] args)
  14.     {
  15.             try
  16.             {
  17.                     func();   //第一步,然后进入这个方法
  18.                     System.out.println("A");//这个因为捕获到异常所以不走了
  19.             }
  20.             catch(Exception e)//这里捕获到fun方法抛出的异常,进行处理,所以自己的try就不走了
  21.             {
  22.                     System.out.println("C");//第四部fun方法走完,因为捕获到异常走这一步,捕获异常输出
  23.             }
  24.             System.out.println("D");//第五步,这个不管前面什么结果最后都要输出</p><p> </p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0

看懂了,感谢:D,请问你用的什么把代码复制过来的,我太小白了:'(
回复 使用道具 举报
浩南酷酷 发表于 2014-2-16 15:52
看懂了,感谢,请问你用的什么把代码复制过来的,我太小白了

你的代码我是用鼠标摁住复制的,我的代码那个代码左下角不是有个代码复制的提示么?你点下应该就可以了
回复 使用道具 举报
奋斗的小胖子 发表于 2014-2-16 15:57
你的代码我是用鼠标摁住复制的,我的代码那个代码左下角不是有个代码复制的提示么?你点下应该就可以了 ...

啊,我就是想知道你是怎么弄出来的那个复制按钮的
回复 使用道具 举报
浩南酷酷 发表于 2014-2-16 16:05
啊,我就是想知道你是怎么弄出来的那个复制按钮的

这个是在发帖的时候点<>这个键,把代码放里面,发帖后就会出现代码复制按钮的
回复 使用道具 举报
主函数调用类Run的方法func(),func()的try语句块中是throw  new Exception();是抛出异常,抛出异常后执行方法中的finally语句,即输出B。那么异常抛出给谁了呢?当然是调用者,谁调用func()方法了呢?当然是主函数,所以只要发生异常,主函数try语句块的下面语句是肯定不执行的。即System.out.println("A");这句不执行。因为抓获了异常所以继续执行主函数的catch代码块输出C。最后一句,不管前面是怎样都会执行的,输出D,注意:如果主函数没有用try{}catch语句处理异常,最后一句代码 System.out.println("D")也执行不到,原理同上。其余没什么,感觉楼上的哥们说的蛮细的。
回复 使用道具 举报
直白一点就是,main方法里,当执行func的时候,出现了异常,所以方法func执行完以后,他后面紧跟的那个打印语句就不执行了,直接进入catch处理func抛出的异常。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马