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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© winsking 中级黑马   /  2013-9-29 18:37  /  1473 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);
     }
}
}

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
你在main方法中调用 procedure()方法,出现异常会执行:
catch(ArrayIndexOutOfBoundsException e)
                {
                        System.out.println("数组超越界限异常:"+e);
                }
执行完procedure() 方法,程序继续执行.这时候又出现异常,就会执行:
catch(ArithmeticException e)
                {
                        System.out.println("除0异常:"+e);
                }
主要就是根据你的mian方法里面的代码顺序来看.

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
一旦报错抛出异常就会终止的,所以最多只能运行一个

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

回复 使用道具 举报
是的,两个异常都可以捕获。主函数运行到 procedure()方法,在该方法中发生了数组下标越界异常,但是你用catch处理了(同时跳出try{……},如果 c[42]=99后面还有语句,就执行不到了),程序会返回主函数接着继续往下执行……运行到  int b=42/a 时,发生了除0异常,程序又转到除0的catch处理语句,处理完跳出try{……},接下来的System.out.println(“b=”+b)也就执行不到了。运行效果如下:C:\Users\lenovo\Desktop

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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