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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ﹏゛心被伱牵 中级黑马   /  2012-10-22 10:01  /  2222 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果有3个catch,第一个catch为扑捉Exception,第二三个为Exception的子类,请问当发生异常的时候,第二三个catch还执行吗,还是都被第一个catch执行好了?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

3 个回复

倒序浏览
二三异常都不会被处理。在java中所有捕获范围小的异常必须放在捕获范围大的异常之前,否则程序在编译的时候就会出现错误提示。
public class ExceptionDemo {
   public static void main(String args[]){
           int i=0;
           int j=0;
           try {
                String str1=args[0];
                String str2=args[1];
                i=Integer.parseInt(str1);
                j=Integer.parseInt(str2);
                int temp=i/j;
        } catch (Exception e) {
                // TODO: handle exception
                System.out.print("其他异常");
        }catch(ArithmeticException e){
                System.out.print("其他异常");
        }
   }
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 陈德基 于 2012-10-22 11:02 编辑

过程是这样的:假设发生异常,首先你抓取的是Exception异常,然后你再抓取一次,抓取的是具体的子类异常。
catch(Exception e)//多态:Exception e = new NoSuchElementExcepion();
{}
catch(NoSuchElementException e) NoSuchElementExcepion e  = new NoSuchElementExcepion();
{}
从上面的多态特性,就可以发现无论你抓取的是什么具体的子类异常,都会首先被Exception异常接收,这样后面的具体子类的异常处理步骤就不会被执行了。
父类的异常抓取要放在异常抓取的最后面,父类异常会直接代替子类异常被处理。

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
下面的只要是上面catch的子类就不会不执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马