在jdk中,每个包中都定义了异常类,而所有的异常类都直接或间接地继承于Java.lang.Throwable类。下图为jdk中异常类的继承关系。
java中的异常类可分为两大类:
- Error
动态链接失败,虚拟机错误等,通常Java程序不应该捕获这类异常,也不会抛弃这种异常。
- Exception
- 运行时异常:继承于RuntimeException的类都属于运行时异常,例如算术异常(除零错)、数组下标越界异常等等。由于这些异常产生的位置是未知的,Java 编译器允许程序员在程序中不对它们做出处理。
- 非运行时异常:除了运行时异常之外的其他由Exception 继承来的异常类都是非运行时的异常,例如FileNotFoundException(文件未找到异常)。Java编译器要求在程序中必须处理这种异常,捕获异常或者声明抛弃异常。这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
① 过度使用异常 :首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。