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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qian0217wei 高级黑马   /  2015-5-5 00:26  /  597 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码
帮忙看下结果,并分析整个执行流程

4 个回复

倒序浏览
首先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

评分

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

查看全部评分

回复 使用道具 举报
痲ボㄋ. 发表于 2015-5-5 09:20
首先output为一个共享数据,在运算时一直进行累加;调用foo(0)这个方法,判断i是否等于1,不等于1,则没 ...

解释的很好。学习了!
回复 使用道具 举报
qian0217wei 发表于 2015-5-6 00:12
解释的很好。学习了!

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

点评

其实我也是重新开始复习到这的!  发表于 2015-5-7 00:44
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马