Java:对于已检查的异常,必须使用处理程序
java文档说,对于选中的异常,必须指定一个可以“捕获”异常的处理程序,或者在方法声明中抛出异常。 但是,如果我这样做,例如:Java:对于已检查的异常,必须使用处理程序,java,exception,checked,Java,Exception,Checked,java文档说,对于选中的异常,必须指定一个可以“捕获”异常的处理程序,或者在方法声明中抛出异常。 但是,如果我这样做,例如: public class DivZero{ public static void main(String[] args){ int a=10; int[] b={1,2,3,4,0}; for (int i=0;i<b.length;i++){ System.out.println(a/b[i]); } } } 公共类DivZ
public class DivZero{
public static void main(String[] args){
int a=10;
int[] b={1,2,3,4,0};
for (int i=0;i<b.length;i++){
System.out.println(a/b[i]);
}
}
}
公共类DivZero{
公共静态void main(字符串[]args){
INTA=10;
int[]b={1,2,3,4,0};
for(int i=0;i扩展,因此它不是检查异常。检查异常是从RuntimeException继承的异常,但不是从继承的异常
引述:
[…]选中的异常类是Throwable
的所有子类,而不是RuntimeException
及其子类和Error及其子类
您必须只捕获选中的异常:java.lang.Exception
的子类不是java.lang.RuntimeException
的子类算术异常
是RuntimeException
的子类
RuntimeException
(s)通常是应用程序中的错误信号,因此您必须解决它们,而不是捕获异常。在您的情况下,arithmetricexception
被抛出到System.out.println(a/b[i])因为您试图将一个int除以0。您需要确保这样的除法不会发生在您的程序中。算术异常不是选中的异常,这就是为什么它允许您很好地编译。
异常的子类称为已检查的异常,其余的都是未检查的异常。Java中有两种类型的异常:扩展的异常被调用并需要处理(捕获它们或抛出它们)-例如,。扩展自的对象被调用,不需要显式处理,除非您需要对它们执行某些操作-例如
对于问题中的代码,您可以看到它是从RuntimeException扩展而来的,因此是未选中的,您不需要显式地处理它