黑马程序员技术交流社区

标题: java异常试题 [打印本页]

作者: qian0217wei    时间: 2015-5-5 00:26
标题: java异常试题
  1. class Test
  2. {
  3.         public static String output="";
  4.         public static void foo(int i)
  5.         {
  6.                 try
  7.                 {
  8.                         if(i==1)
  9.                                 throw new Exception();
  10.                 }
  11.                 catch(Exception e)
  12.                 {
  13.                         output+="2";
  14.                         return;
  15.                 }
  16.                 finally
  17.                 {
  18.                         output+="3";
  19.                 }
  20.                 output+="4";
  21.         }
  22.         public static void main(String[] args)
  23.         {
  24.                 foo(0);
  25.                 System.out.println(output);
  26.                 foo(1);
  27.                 System.out.println(output);
  28.         }
  29. }
复制代码
帮忙看下结果,并分析整个执行流程

作者: 痲ボㄋ.    时间: 2015-5-5 09:20
首先output为一个共享数据,在运算时一直进行累加;调用foo(0)这个方法,判断i是否等于1,不等于1,则没有抛出异常,不走catch,但是finally必须走,然后再往下执行,这时输出的为34;紧接着调用foo(1),这个时候要明确一点,output的值已经为34了,判断i==1,抛出异常,走catch中output+="2";,这时为342,接着读到return;这时程序会看有没有finally如果有执行,没有程序结束,走完finally值为3423,但是output+=“4”是不会执行的,因为catch中读到return,这时只会去看有没有finally,有的话执行没有程序结束。所以结果为34,3423
作者: qian0217wei    时间: 2015-5-6 00:12
痲ボㄋ. 发表于 2015-5-5 09:20
首先output为一个共享数据,在运算时一直进行累加;调用foo(0)这个方法,判断i是否等于1,不等于1,则没 ...

解释的很好。学习了!
作者: 痲ボㄋ.    时间: 2015-5-6 12:23
qian0217wei 发表于 2015-5-6 00:12
解释的很好。学习了!

:)只是最近刚好复习了下基础




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