异常的分类
Java中一共提供了try、catch、finally、throw和throws 5个关键字来处理异常,其中的try-catch-finally需要配套使用,它们的作用是捕获和处理异常,使用try关键字和它后面的{}把有可能出现异常的代码包含起来。如果在try语句块中发生异常,这个异常就会被抛出。这时候就可以使用catch语句来捕获异常,并在这个语句块中,对这个异常进行处理。还有一些是不管是否发生异常,都需要执行的代码,就把它们放到finally语句块中。throw关键字用来手动引发一个异常。throws关键字用来定义任何被调用方法的异常。
在Java的lang包里有一个Throwable类,它是所有异常的父类或者间接父类。每个异常类型都是Throwable类的子类,这其中有两个直接子类:Error和Exception。Error类及其子类是用来处理系统内部及程序运行环境的异常,一般与硬件有关,由系统直接处理,不需要程序员在程序中处理。
Exception类是程序能够捕获到的异常情况。它又可以分为两大类:运行时异常(为RuntimeException)和检查型异常(也称非运行时异常)。运行时异常(RuntimeException)是一种设计或者是实现问题上出现的错误,大多数是由于程序设计不当而引发的,但这种错误要在运行期间才会发生和被发现。下面列出了系统会出现的运行时异常,如表7.1所示。
表7.1 运行时异常
异常名称 | 异常说明 |
ArithmeticException | 除以0等算术错误 |
ArrayIndexOutOfBoundsExc | 数组下标出界 |
ArrayStoreException | 数组元素值与数组类型不同 |
ClassCastException | 强制类型转换异常 |
IllegalArgumentException | 调用方法的参数非法 |
IllegalMonitorStateExcep | 非法监控操作 |
IllegalStateException | 环境或状态错误 |
IllegalThreadStateExcept | 请求操作与当前线程不兼容 |
IndexOutOfBoundsExceptio | 索引越界 |
NullPointerException | 非法使用空引用 |
NumberFornatException | 字符串非法转换数字格式 |
续表
异常名称 | 异常说明 |
SecurityException | 安全性 |
StringIndexOutBounds | 字符串索引越界 |
UnsupportedOperationExce | 操作错误 |
除了运行时异常外,其余的异常均为检查型异常,这类异常仍然是发生在运行时,不过编译器在编译时会进行检查,一旦发现某类中的某些语句有可能会产生异常,就提示并强迫开发者立即处理,否则不能通过编译。下面列出了常用的检查异常,如表7.2所示。
表7.2 检查异常
异常名称 | 异常说明 |
ClassNotFoundException | 找不到相关类 |
CloneNotSupportedExcepti | 对象不能实现 |
IllegalAccessException | 访问类被拒绝 |
InstantiationException | 创建抽象对象 |
InsterruptedException | 线程被另一个线程中断 |
NotSuchFieldException | 请求的内容不存在 |
NoSuchMethodException | 请求的方法不存在 |