检查异常vs运行时异常
异常是一种特殊类型的事件,它可以干扰正常的程序流。exception这个名字来自“exception event”。引发异常是创建异常对象并将其交给运行时系统的过程。当运行时系统接收到异常对象时,它将尝试在调用堆栈中找到某人来处理它,方法是按相反的顺序遍历它(方法被调用的顺序)。如果运行时系统找到具有异常处理程序的方法,则该运行时系统将成功。异常处理程序是可以正式处理所述异常的代码块。如果运行时系统找到适当的处理程序,它将把异常对象传递给处理程序。这叫做捕捉异常。但是,如果无法处理异常,程序将终止。在Java中,异常继承自Throwable类。检查异常是编译器强制处理的异常。运行时异常是一种异常类型,编译器不检查这些异常。
什么是检查异常?
选中的异常是类的对象之一java.lang.exception或其子类(除了java.lang.RuntimeException以及它的子类)。检查的异常在编译时被“检查”。这意味着程序员必须捕捉或抛出这些异常,否则编译会抱怨(导致编译器错误)。由于这个原因,许多检查过的异常对于程序员来说是非常熟悉的。例如,IOException及其子类都是checked异常,每当程序员处理访问或修改文件时,编译器都会进行检查,以确保所有可能的IOException都由程序员处理。
什么是运行时异常?
运行时异常包括java.lang.RuntimeException以及它的所有子类。从理论上讲,它们与checked异常具有相同的用途,可以像checked异常一样抛出或处理,但编译器不强制执行对它们的处理。因此,运行时异常属于未检查异常的家族。NullPointerException、NumberFormatException、ClassCastException和ArrayIndexOutOfBoundsException是Java中常见的运行时异常。
检查异常和运行时异常之间的区别是什么?
虽然,检查异常和运行时异常在程序执行期间都是不希望发生的,但它们有它们的区别。已检查的异常处理由编译器强制执行,但运行时异常则不是。因此,为了编译代码,必须抛出或处理已检查的异常,但是对于运行时异常没有这样的要求。因此,运行时异常与错误一起属于未检查异常类别。