给出一段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......");
}
}
为什么这段代码会产生编译时错误?
答案 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
类是ArithmeticException
和ArrayIndexOutOfBoundsException
以及其他例外的父类。因此,如果发生异常并且Exception
中存在捕获,那么肯定可以捕获它。因此,无法到达写在它下面的其他catch块,它们根本没用。因此,它将变成无法访问的代码,并且众所周知,当某些语句无法访问时,JAVA会给出错误。因此,它会给出编译时错误。
以防万一,如果您要在子异常之后编写它,那么它将进行编译而没有任何错误。