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

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]);
   }
 }
}
公共类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扩展而来的,因此是未选中的,您不需要显式地处理它