有这样一段代码:
public class ExceptionTest1 {
  public static void main(String[] args) {
    try {
      int a=42/0;
      int c[]={1};
      c[42]=99;
    }  catch (ArrayIndexOutOfBoundsException e) {
      System.out.println("数组下标越界"+e); 
    } catch (ArithmeticException e) {
      System.out.println("发生了被0除"+e);
    } 
  } 
}
结果是
发生了被0除java.lang.ArithmeticException: / by zero问题:为什么第一个catch的处理结果不显示。执行正常,显然是捕获了数组下标的异常,可就是无输出。
若将int a=42/0这行删掉,第一个catch就正常了,奇怪

解决方案 »

  1.   

    因为发生了异常,后面的都不管了,直接去寻找与之对应的catch语句执行了。
      

  2.   

    int a=42/0; 
    c[42]=99; 
    这两行,你哪行写在前面,捕获的就会是它对应的异常。
      

  3.   

     int a=42/0; 
     int c[]={1}; 
     c[42]=99; 
    明明是两个异常,不能同时出现啊.
    有一个就已经停了.
      

  4.   

    所以 你需要的是2个try catch 
      

  5.   

    看看执行过程,如果都要捕获,要用两个try
      

  6.   

    恩,这个例子也给楼主拓展了一个知识点,catch异常的时候要先抓范围小的再抓大的,不然会有漏网之鱼!!
      

  7.   

    执行到第一个错误语句,就直接跳到相应的catch了,所以不会有下面的异常出现。
      

  8.   

          int a=42/0; 
    这句执行完已经发生异常,程序进入了catch块      int c[]={1}; 
          c[42]=99; 
    这两句根本就没执行这样写两个异常就都被捕获了
    public class ExceptionTest1 { 
      public static void main(String[] args) { 
        try { 
          int a=42/0; 
        } catch (ArithmeticException e) { 
          System.out.println("发生了被0除"+e); 
        } 
        try { 
          int c[]={1}; 
          c[42]=99; 
        }  catch (ArrayIndexOutOfBoundsException e) { 
          System.out.println("数组下标越界"+e); 
        } 
      } 

      

  9.   

    后面执行不到,先到先显的,和return语句一样 这里就象  if(){return}else if(){return}
      

  10.   

    去找对应的异常,执行相应的catch块...
      

  11.   

       int a=42/0; 
    这句执行完已经发生异常,程序进入了catch块       int c[]={1}; 
          c[42]=99; 
    这两句根本就没执行 
      

  12.   

    想要两个也可以,import junit.framework.TestCase;
    import org.apache.log4j.Logger;public class Test extends TestCase { private Logger log = Logger.getLogger(Test.class);  public void test() {
    log.info("test1");
    try { 
    int a=42/0; 
    }catch (ArithmeticException e) { 
    System.out.println("发生了被0除"+e); 
    try{
    int c[]={1}; 
    c[42]=99; 
    }catch (ArrayIndexOutOfBoundsException e2) { 
    System.out.println("数组下标越界"+e2); 
    }

    }
    }
    test1
    发生了被0除java.lang.ArithmeticException: / by zero
    数组下标越界java.lang.ArrayIndexOutOfBoundsException: 42
      

  13.   

    要是除了错误之后还能往后运行 final 语句就没用了...