有这样一段代码:
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.   

    因为在try语句中一旦发现异常那么这个整个try里面的内容都将不会再执行,但是会执行Finally里面的语句。
      

  2.   

    执行到 int a=42/0; 被catch到异常,然后try后面的语句就不会执行了,自然不会再catch   c[42]=99;了
      

  3.   

    catch语句是根据异常中种类来捕获的并不是一有异常就执行所有的catch语句,而是执行对应异常的catch语句, int a=42/0; 抛出了ArithmeticException异常,第一个catch发现异常不是捕获的类型,所以pass过去了,给第二catch捕获;你把int a=42/0删除之后,跑的异常第一个可以捕获,就捕获了.