黑马程序员技术交流社区

标题: 请问这个代码怎么走的过程? [打印本页]

作者: 浩南酷酷    时间: 2014-2-16 15:30
标题: 请问这个代码怎么走的过程?
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 15:41
本帖最后由 奋斗的小胖子 于 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>
复制代码

作者: 浩南酷酷    时间: 2014-2-16 15:52
奋斗的小胖子 发表于 2014-2-16 15:41

看懂了,感谢:D,请问你用的什么把代码复制过来的,我太小白了:'(
作者: 奋斗的小胖子    时间: 2014-2-16 15:57
浩南酷酷 发表于 2014-2-16 15:52
看懂了,感谢,请问你用的什么把代码复制过来的,我太小白了

你的代码我是用鼠标摁住复制的,我的代码那个代码左下角不是有个代码复制的提示么?你点下应该就可以了
作者: 浩南酷酷    时间: 2014-2-16 16:05
奋斗的小胖子 发表于 2014-2-16 15:57
你的代码我是用鼠标摁住复制的,我的代码那个代码左下角不是有个代码复制的提示么?你点下应该就可以了 ...

啊,我就是想知道你是怎么弄出来的那个复制按钮的
作者: 奋斗的小胖子    时间: 2014-2-16 16:16
浩南酷酷 发表于 2014-2-16 16:05
啊,我就是想知道你是怎么弄出来的那个复制按钮的

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




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