面向对象集|每日一题:Error 和 Exception 的区别?

171 阅读1分钟

参考回答:

在 Java 的异常体系结构中,Error 类和 Exception 类都是 Throwable 类的子类,所以理论上来讲,Error、Exception 以及它们各自的子类都可以被抛出和捕获处理。

但是 Error 类,顾名思义,它指的是在 Java 程序中 仅靠程序自身无法恢复的严重错误 ,常见的 Error 子类有:NoClassDefFoundError(没有找到指定类的定义错误)、NoSuchMethodError(没有找到指定的方法错误)、OutOfMemoryError(内存溢出错误)、StackOverflowError(堆栈溢出错误)等。一个正常的程序不应该捕获处理这类异常 ,抛出了这类错误的线程应该立刻终止,然后由人工来进行修复。

Exception 类是指在 Java 程序中 可以捕获处理的非严重错误 ,这些错误 在程序运行过程中是可以通过处理恢复的

Exception 类也分为两类:

一类是 Checked Exception(受检查异常),所谓受检查异常就是 Java 要求程序员必须立刻进行处理的异常。例如:FileNotFoundException(文件找不到异常)、SQLException(SQL异常)。在官方看来,如果真的出现了此类异常,相对容易通过捕获处理来修复相应的问题,以保障程序继续正常运行。如果不想处理,那也需要向调用者声明。

另一类是 Runtime Exception(运行时异常),Java 不要求程序员立刻进行处理,因为这类异常大多数是由于逻辑错误引起的,例如:NullPointerException(空指针异常)、ArithmeticException(算术异常)、ArrayIndexOutOfBoundsException(数组索引越界异常)等。正常来讲应该避免出现这类异常,但是这类异常也可以按照需要来进行捕获处理。