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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 祁振朋 中级黑马   /  2013-3-19 00:49  /  2277 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 祁振朋 于 2013-3-19 18:05 编辑
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5. try
  6. {
  7. showExce();
  8. System.out.println("A");
  9. }
  10. catch(Exception e)
  11. {
  12. System.out.println("B");
  13. }
  14. finally
  15. {
  16. System.out.println("C");
  17. }
  18. System.out.println("D");
  19. }
  20. public static void showExce()throws Exception
  21. {
  22. throw new Exception();
  23. }
  24. }
复制代码
求解释最后结果,为什么是这个结果

评分

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

查看全部评分

5 个回复

倒序浏览
结果应该是B,C,D
class Demo
{
public static void main(String[] args)
{
try
{
showExce(); //这个方法会抛出异常,这里转到下面Catch
System.out.println("A");
}
catch(Exception e)//这里捕捉到异常并处理打印B
{
System.out.println("B");
}
finally
{
System.out.println("C");//finally里面存放的是一定会执行的代码打印C,D
}
System.out.println("D");
}
public static void showExce()throws Exception
{
throw new Exception();
}
}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 汪平乐 于 2013-3-19 08:55 编辑

我调整了代码的格式,方便阅读,答案是B,C,D
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4.     {
  5.          try
  6.              {
  7.                   showExce(); //先执行showExce方法,但此方法抛出了一个新异常,所以跳过了下面的语句,JVM不执行SOP(A);
  8.                   System.out.println("A");
  9.              }
  10.          catch(Exception e) //接着执行此语句,显示B
  11.             {
  12.                   System.out.println("B");
  13.             }
  14.          finally //然后执行,显示C,finally在异常中是一定执行的语句;
  15.             {
  16.                  System.out.println("C");
  17.             }
  18.         System.out.println("D"); //main线程语句,根据顺序最后执行,显示D
  19.     }
  20. public static void showExce()throws Exception
  21.     {
  22.         throw new Exception();
  23.     }
  24. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
//打印的结果是B,C,D
//先给你解释下代码流程
//首先你这代码肯定会抛出异常进入catch打印出B
//然后进入finally
//finally你们的两个都会执行到,所以会打印出CD
//最后打印出 的是BCD
class Demo
{
            public static void main(String[] args)
   {
       try
            {

        showExce();
        System.out.println("A");
             }
        catch(Exception e)
               {
                  System.out.println("B");
               }
   finally
          {      
           System.out.println("C");
          }
        System.out.println("D");
       }
       public static void showExce()throws Exception
      {
     throw new Exception();
       }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
showExce()抛出异常,不会继续执行try里面的代码,被catch捕获后输出B,finally必须执行,所以输出C,main函数最后输出D.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马