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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴在兴 中级黑马   /  2013-1-26 10:53  /  1708 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Jisuan
  2. {
  3.         public int chu(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.                 Jisuan ji=new Jisuan();
  15.                                
  16.                 try{
  17.                         int x=ji.chu(6,2);
  18.                         System.out.println("x=="+x); //当出现异常时,异常语句后面不再执行
  19.                 }catch(Exception e){          //如果多个catch块中有出现继承关系,父类异常catch块放在最下面
  20.                          e.printStackTrace();
  21.                 }catch(ArithmeticException e)
  22.                 {
  23.                          System.out.println(e.getMessage());  //异常信息
  24.                          System.out.println(e.toString());    //异常名称:异常信息
  25.                  e.printStackTrace();                 //异常名称:异常信息  异常出现的位置
  26.                 }catch(ArrayIndexOutOfBoundsException e)
  27.                 {
  28.                          System.out.println(e.toString());
  29.                 }
  30.         }
  31. }
复制代码
为什么程序没有出现异常情况的条件(分母不为0,数组没溢出)  还会捕获异常啊  毕老师说的我还没听懂

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

6 个回复

倒序浏览
你Jisuan类里定义的是public int chu(int a,int b),两个参数是你要传递的。有传递就会出现异常,你代码运行的时候条件都满足,因为你自己知道,会绕开异常,但是如果你给别人用呢,别人又不知道这里分母不能为0,所以程序要全面的考虑异常的可能性。
回复 使用道具 举报
因为你在chu(int a,int b) 这个方法上面已经声明了throws ArithmeticException,ArrayIndexOutOfBoundsException
所以,不管你给他传递什么数据,这个方法的调用者必须对他声明的异常处理,要么抓,要么抛
回复 使用道具 举报
哦 这样啊  哈 了解了谢谢啊
回复 使用道具 举报
{:soso_e153:}这代码貌似有毛病吧,你写的时候没有出现编译错误吗??
你在写catch语句的时候应该从小写到大catch(Exception e){          是最大的,其他的异常都是继承的,所以他要放在最后一个catch语句中。。。。
回复 使用道具 举报
你在上面的函数上声明异常了,额,
public int chu(int a,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException
声明后要么捕获处理,要么抛出,
除非你声明的异常是RuntimeException的子类
RuntimeException 是特殊子类异常,一旦该异常发生,程序运行时就会报错
回复 使用道具 举报
你说的很对,为什么没有出现异常还要捕获异常。是不是不需要么。当然需要首先,这是给编译器看的,而后你有很多想不到出现异常的情况会让你
束手无策。(代码往往那个不可能那么简单)那个时候你欲哭无泪。如下例子:(a和b是变量)如下代码典型的数组角标越界。
public class Test1 {
        public static void zz(int a){
                int[] arr = new int[a];
                for(int i =1;i<100;i++){
                        arr[i]=i;
                        System.out.println(arr[i]);
                }               
        }
        public static void main(String[] args){
                zz(99);
        }
}

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