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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-5-9 02:43  /  1870 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo
  2. {
  3.         public int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException  //声明可能会出现问题
  4.         {
  5.                 int [] arr=new int[a];
  6.                 System.out.println(arr[4]);
  7.                 return a/b;
  8.         }
  9. }
  10. class ExceptionDemo
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 Demo d = new Demo();
  15.                 try
  16.                 {
  17.                         int x=d.div(4,0);
  18.                         System.out.println("x="+x);
  19.                 }
  20.        
  21.                 catch (Exception e)
  22.                 {
  23.                         System.out.println("haha:"+e.toString());
  24.                 }
  25.                 catch(ArithmeticException e)
  26.                 {
  27.                         System.out.println(e.toString());
  28.                         System.out.println("快零除了");
  29.                 }
  30.                 catch(ArrayIndexOutOfBoundsException e)
  31.                 {
  32.                         System.out.println(e.toString());
  33.                         System.out.println("角标越界了");
  34.                 }       
  35.                
  36.                 System.out.println("over");
  37.         }
  38. }

复制代码
我看视频中有点没弄明白,把父类异常catch (Exception e)放在最上面的话,为什么编译都通不过?我认为应该是父类异常执行后,下面的2个子类catch就不执行了。为什么通不过呢,是不是我理解错了

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 龚振 龚振 龚振 于 2012-5-9 03:14 编辑

自己的一些理解,供参考噢~
1捕捉异常要尽量具体,尽量详细。如果把父类异常catch (Exception e)放最上面,
             那所有异常都被Exception捕捉了,下面的子类无法捕捉,没意义了,不具体,编译也不通过。
2将子类异常放上面,最后加上父类异常catch (Exception e),
             还可以对可能存在但又未捕获到的异常通过父类异常catch (Exception e)进行查漏捕获

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 十期见哥们···

查看全部评分

回复 使用道具 举报
理由楼上也说了。这是由 java 的规则所定的,如同 return 后面不能有其它语句,catch (Exception e)放在最上面,那它后面的语句就无意义了,因不会被执行到。
回复 使用道具 举报
编译不通过就是说明存在语法错误,你把Exception放在上面,它什么异常都能解决,这样下面两个catch等于无用,执行不到啊。就相当于多余的,编译自然失败了……
回复 使用道具 举报
我的理解是:
    既然在Demo类里声明了异常,
那么,在main方法里,捕获异常时,要么把子类异常写在上面。这样可以看清楚比较具体的异常。
    如果,把父类异常放在了前面,那么,子类的异常就没有必要再写在下面了。因为,父类已经处理了,你就没有必要再让子类异常再去处理了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马