黑马程序员技术交流社区

标题: 关于try,catch,中多个catch的问题 [打印本页]

作者: ﹏゛心被伱牵    时间: 2012-10-22 10:01
标题: 关于try,catch,中多个catch的问题
如果有3个catch,第一个catch为扑捉Exception,第二三个为Exception的子类,请问当发生异常的时候,第二三个catch还执行吗,还是都被第一个catch执行好了?
作者: 王健宇    时间: 2012-10-22 10:41
二三异常都不会被处理。在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("其他异常");
        }
   }
}
作者: 怪盗急得    时间: 2012-10-22 11:00
本帖最后由 陈德基 于 2012-10-22 11:02 编辑

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




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