黑马程序员技术交流社区

标题: 关于异常抛出后处理顺序不解_谢谢 [打印本页]

作者: 王亚运    时间: 2012-11-15 23:58
标题: 关于异常抛出后处理顺序不解_谢谢
本帖最后由 王亚运 于 2012-11-16 09:16 编辑

关于异常抛出后执行顺序不解。。
这是day10练习4_16题。
原题是考察抛出异常后异常后面代码无法执行到,然后编译失败。
现在把无法执行到代码注释掉。
运行。
是先执行func()抛出的异常被catch()捕捉。
还是先执行fun()方法,被func()方法内的catch()捕捉?
先猜下运行结果吧。
知道的话,望指点。

运行结果:B D
  1. class Demo
  2. {        
  3.      public static void func()
  4.      {
  5.           try
  6.           {
  7.                throw  new Exception();
  8.                //System.out.println("A");
  9.           }
  10.          catch(Exception e)
  11.          {
  12.          System.out.println("B");//为什么是先运行这个捕捉?
  13.          }
  14.         }
  15.         public static void main(String[] args)
  16.      {
  17.          try
  18.          {
  19.               func();
  20.          }
  21.          catch(Exception e)
  22.         {
  23.                System.out.println("C");
  24.         }
  25.         System.out.println("D");
  26.      }
  27. }
复制代码
谢谢观看.....

作者: 张利    时间: 2012-11-16 00:52
fun()方法中对于异常的处理是try catch  因此相当于方法内部解决异常,在调用方法的时候是不用再次try catch的
程序的流程是 调用方法fun(),抛出了异常,然后就到了catch捕捉了 ,对于这个异常的处理是打印出了B,到这里fun()方法结束
fun()方法结束后并没有异常被抛出,因此不会执行打印c,接着往下走打印D
作者: 刘菲    时间: 2012-11-16 08:08
1.上面的运行结果应该是BD。
2.在程序运行时会先执行主函数,当主函数执行到func()时,就会去调用func方法,
  而在func方法的内部虽然出现异常,但却又在其内部被捕捉到了,所以会输出B。
3.因为func()内部已经将异常处理过了,所以在其方法上就不需要再进行异常声明了。
4.当func()方法执行完后,继续执行主函数,因为没有进行异常声明,所以主函数就没有异常发生,
  就不会去执行catch语句。直接执行下面的语句,输出D。
5.以上为个人理解,希望能帮到楼主。
作者: 王玮    时间: 2012-11-16 08:41
本帖最后由 iacky2 于 2012-11-16 09:14 编辑

运行结果:
B
D

运行func()的时候,异常被func()内try catch掉,输出B,而对于fuunc()方法在main程序中并未抛出异常,所以不执行 main中的catch语句块,然后继续执行主程序输出D
作者: 王亚运    时间: 2012-11-16 09:14
张利 发表于 2012-11-16 00:52
fun()方法中对于异常的处理是try catch  因此相当于方法内部解决异常,在调用方法的时候是不用再次try catc ...

谢谢。。。赶脚该给你们加分。。。




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