Java编译时错误和异常处理中的多个catch块

时间:2013-02-06 08:19:13

标签: java exception compile-time

给出一段java代码:

class SampleExpcetion {
  public static void main(String args[]){
        try {
                 int a[]= new int[15];
                 a[5]= 30/0;
         } 
         catch(Exception e) {System.out.println("task completed");}  
         catch(ArithmeticException e) {System.out.println("task1 completed");}  
         catch(ArrayIndexOutOfBoundsException e) { System.out.println("task2 completed");}

         System.out.println("Rest of the code......");
   }
}  

为什么这段代码会产生编译时错误?

6 个答案:

答案 0 :(得分:2)

第一个catch块捕获所有异常,因此永远无法访问其他异常。

答案 1 :(得分:2)

因为catch(Exception e) {System.out.println("task completed");}会捕获所有异常。

 catch(ArithmeticException e) {System.out.println("task1 completed");}  
 catch(ArrayIndexOutOfBoundsException e) { System.out.println("task2 completed");}

是一个死密码。

像这样重新排序,甚至更好地消除:catch(Exception e)

  catch(ArithmeticException e) {System.out.println("task1 completed");}  
  catch(ArrayIndexOutOfBoundsException e) { System.out.println("task2 completed");}
  catch(Exception e) {System.out.println("task completed");}  

答案 2 :(得分:1)

编译器发现在超类之后无法捕获ArithmeticException ;第一个catch子句总是匹配。

答案 3 :(得分:1)

try catch块中,所有后续catch块在catch块中都不应该有任何子类异常。这将导致死代码。

另外,在SE 7中,您可以指定要检查的所有类型的异常,例如:

catch (IOException|SQLException ex) {
    //...
}

您是否想了解NullPointerException是什么?

答案 4 :(得分:1)

因为"例外e"能够捕获所有异常对象,因此不会到达其他catch块。这被称为"无法访问的代码"。无法访问的代码是Java语言中的错误。

例如: - 如果衣服是一个例外类,并且有子类 - >衬衫和裤子。 如果衬衫类的例外已经发生但是我们正在通过衬衫前衣服捕捉它,那么它将不会到达下一个抓住衬衫异常,因为它已被处理。 这导致下一个catch块无法访问。

希望它有所帮助!!!

答案 5 :(得分:0)

Exception类是ArithmeticExceptionArrayIndexOutOfBoundsException以及其他例外的父类。因此,如果发生异常并且Exception中存在捕获,那么肯定可以捕获它。因此,无法到达写在它下面的其他catch块,它们根本没用。因此,它将变成无法访问的代码,并且众所周知,当某些语句无法访问时,JAVA会给出错误。因此,它会给出编译时错误。

以防万一,如果您要在子异常之后编写它,那么它将进行编译而没有任何错误。