黑马程序员技术交流社区

标题: 求解释代码,哎,各种看不懂 [打印本页]

作者: 祁振朋    时间: 2013-3-19 00:49
标题: 求解释代码,哎,各种看不懂
本帖最后由 祁振朋 于 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. }
复制代码
求解释最后结果,为什么是这个结果
作者: 全超    时间: 2013-3-19 01:06
结果应该是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();
}
}
作者: 汪平乐    时间: 2013-3-19 08:53
本帖最后由 汪平乐 于 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. }
复制代码

作者: 赵鸿富    时间: 2013-3-19 09:20
//打印的结果是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();
       }
}

作者: 陈丽莉    时间: 2013-3-19 14:37
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~
作者: 老衲玩IT    时间: 2013-8-24 16:56
showExce()抛出异常,不会继续执行try里面的代码,被catch捕获后输出B,finally必须执行,所以输出C,main函数最后输出D.




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