黑马程序员技术交流社区

标题: 求解一个异常问题 [打印本页]

作者: winsking    时间: 2013-9-29 18:37
标题: 求解一个异常问题
本帖最后由 winsking 于 2013-9-30 20:04 编辑

这个代码运行结果是什么?  2个catch都会运行到么?为什么?
class ExMulti
{
     static void procedure()
    {
         try
         {
               int c[]={1};
               c[42]=99;
         }
         catch(ArrayIndexOutOfBoundsException e)
        {
              System.out.println(“数组超越界限异常:”+e);
        }
    }
public static void main(String args[])
{
      try
      {
         procedure();
         int a=args.length;
         int b=42/a;
         System.out.println(“b=”+b);
      }
      catch(ArithmeticException e)
     {
          System.out.println(“除0异常:”+e);
     }
}
}

作者: HM马强    时间: 2013-9-29 18:45
你在main方法中调用 procedure()方法,出现异常会执行:
catch(ArrayIndexOutOfBoundsException e)
                {
                        System.out.println("数组超越界限异常:"+e);
                }
执行完procedure() 方法,程序继续执行.这时候又出现异常,就会执行:
catch(ArithmeticException e)
                {
                        System.out.println("除0异常:"+e);
                }
主要就是根据你的mian方法里面的代码顺序来看.
作者: 周志龙    时间: 2013-9-29 19:07
一旦报错抛出异常就会终止的,所以最多只能运行一个
作者: 摄影勾魂    时间: 2013-9-29 19:19
是的,两个异常都可以捕获。主函数运行到 procedure()方法,在该方法中发生了数组下标越界异常,但是你用catch处理了(同时跳出try{……},如果 c[42]=99后面还有语句,就执行不到了),程序会返回主函数接着继续往下执行……运行到  int b=42/a 时,发生了除0异常,程序又转到除0的catch处理语句,处理完跳出try{……},接下来的System.out.println(“b=”+b)也就执行不到了。运行效果如下:C:\Users\lenovo\Desktop




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