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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王靖远 金牌黑马   /  2013-5-15 17:17  /  1803 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王靖远 于 2013-5-15 18:30 编辑
  1. class Demo
  2. {
  3.         int div(int a ,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException
  4.         {
  5.                 int[] arr = new int[a];
  6.                 System.out.println(arr[4]);

  7.                
  8.                 return a/b;
  9.         }
  10. }
  11. class ExceptionDemo
  12. {
  13.         public static void main(String[] args)//throws Exception
  14.         {
  15.                 Demo d =new Demo();
  16.                 try
  17.                 {
  18.                         int x = d.div(4,0);
  19.                         System.out.println("x="+x);
  20.                         
  21.                 }
  22.                 catch (Exception e)//本来括号里应该是ArithmeticException e,我不小心在这里输入了Exception e。
  23.                 {
  24.                         System.out.println("除零啦");
  25.                         System.out.println(e.getMessage());
  26.                         System.out.println(e.toString());
  27.                         
  28.                         e.printStackTrace();
  29.                 }
  30.                 catch (ArrayIndexOutOfBoundsException e)
  31.                 {
  32.                         System.out.println(e.toString());
  33.                         System.out.println("角标越界啦");
  34.                 }

  35.                 System.out.println("over");
  36.         }
  37. }
复制代码
catch (Exception e)//本来括号里应该是ArithmeticException e,我不小心在这里输入了Exception e。
然后运行的结果是

谁能帮我分析下怎么回事?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

倒序浏览
这个意思是说数组角标越界异常,你的数组肯定越界了,Exception 是ArithmeticException的间接父类,可以接收子类捕获异常,
下面的catch (ArrayIndexOutOfBoundsException e)永远不会执行,
回复 使用道具 举报
catch (Exception e)/和catch (ArrayIndexOutOfBoundsException e)捕获的顺序错了。我说一下多个捕获的理解吧:
在使用多个 catch捕获异常,先捕获小类型的异常,后捕获大类型的异常。Exception是所有异常的父类接口,这个是最大的。
多态的性质,父类对象可以接受子类对象。Exception可以捕获所有异常。这个捕获了,就没后面异常啥事了,捕获角标异常就白写了。
ArrayIndexOutOfBoundsException这个角标越界异常比Exception类型级别小。
你在改一改吧。先捕获角标越界异常。后捕获Exceptio异常。。

这是我的理解,哪里不对,希望给点建议。。。
回复 使用道具 举报
韩秀山 发表于 2013-5-15 17:34
catch (Exception e)/和catch (ArrayIndexOutOfBoundsException e)捕获的顺序错了。我说一下多个捕获的理 ...

你的理解是对的。我又回头看了一遍视频,毕老师提到了这个问题。
回复 使用道具 举报
王靖远 发表于 2013-5-15 17:35
你的理解是对的。我又回头看了一遍视频,毕老师提到了这个问题。

嗯,谢谢!我也是初学着,好多东西怕理解错了,对后面工作影响很大。感谢你的回应,如果有不足的地方希望发表出来。这对我的帮助有很大。。
回复 使用道具 举报
Exception e=new ArithmeticException();
这是一个多态的体现,这是父类指向了子类的引用,输出的是new ArithmeticException().getMessage()
ArithmeticException是 当出现异常的运算条件时,抛出此异常

       catch (Exception e)//本来括号里应该是ArithmeticException e,我不小心在这里输入了Exception e。

                {

                       System.out.println("aaaa除零啦");

                       System.out.println(new ArithmeticException().getMessage());

                        System.out.println(e.toString());

                        
                      e.printStackTrace();

                }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马