黑马程序员技术交流社区

标题: 抛出的异常执行后为什么只提示一条异常 [打印本页]

作者: 闪亮未来    时间: 2014-9-8 15:26
标题: 抛出的异常执行后为什么只提示一条异常
  1. class Demo
  2. {
  3.         int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通过throws关键字声明了该功能可能会出现的异常
  4.         {
  5.                 int[] arr = new int[a];

  6.                 System.out.println(arr[4]);

  7.                 return a/b;
  8.                
  9.         }
  10. }

  11. class  ExceptionDemo2
  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.                
  23.                 catch (ArithmeticException e)
  24.                 {
  25.                         System.out.println(e.toString());
  26.                         System.out.println("被零除了!!");

  27.                 }
  28.                 catch (ArrayIndexOutOfBoundsException e)
  29.                 {
  30.                         System.out.println(e.toString());
  31.                         System.out.println("角标越界啦!!");
  32.                 }
  33.                
  34.                 /**/
  35.                 catch(Exception e)
  36.                 {
  37.                         System.out.println("hahah:"+e.toString());
  38.                 }

  39.                 System.out.println("over");

  40.         }
  41. }
复制代码




明明是有除零了跟角标越界的,总是只能提示一条
作者: xpaibeyond    时间: 2014-9-8 15:46
   抛角标越界异常时,后面的代码就不执行了。 catch也就只捕捉到了ArrayIndexOutOfBoundsException.
作者: 闪亮未来    时间: 2014-9-8 22:09
xpaibeyond 发表于 2014-9-8 15:46
抛角标越界异常时,后面的代码就不执行了。 catch也就只捕捉到了ArrayIndexOutOfBoundsException. ...

那就是说不可能同时报出两个异常咯
作者: 安茹黑马    时间: 2014-9-8 22:13
当程序运行到System.out.println(arr[4])时,会抛出数组越界异常,这时候就直接将异常返回给调用者,即main函数,div方法里后面的代码就不执行了
作者: xpaibeyond    时间: 2014-9-8 23:56
闪亮未来 发表于 2014-9-8 22:09
那就是说不可能同时报出两个异常咯

   在catch或finally里再try catch一次。
比如:
  catch (ArrayIndexOutOfBoundsException e)
                   {               
                           System.out.println(e.toString());
                           System.out.println("角标越界啦!!");
                           try{
                                 int x=5/0;
                           }catch(ArithmeticException a){
                                   System.out.println(a.toString());
                                    System.out.println("被零除了!!");
                           }
                           
                   }
作者: daoqin    时间: 2014-9-9 11:39
根据java的异常机制,try、catch、finaly中catch可有多个,执行过程是自上而下去匹配异常的,如果前一个异常匹配到了,则不会进入后面的异常,之后直接执行finaly。




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