核心技术:异常、断言和日志
跳到导航
跳到搜索
错误处理
异常分类
异常对象都是派生于Throwable 类的一个实例:
- Error:类层次结构描述了Java 运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。
- Exception:
- RuntimeException:由程序错误导致的异常属于RuntimeException;
- 其他异常:由于像I/O 错误这类问题导致的异常;
派生于RuntimeException 的异常包含下面几种情况:
- 错误的类型转换。
- 数组访问越界i
- 访问null 指针
不是派生于RuntimeException 的异常包括:
- 试图在文件尾部后面读取数据。
- 试图打开一个不存在的文件。
- 试图根据给定的字符串查找Class 对象, 而这个字符串表示的类并不存在。
非受查异常 与 受查异常:
- 非受查(unchecked) :异常派生于Error 类或RuntimeException 类的所有异常称为;
- 受查(checked) :所有其他的异常称为。
声明受査异常
使用throws子句声明异常:
- 调用一个抛出受査异常的方法, 例如, FilelnputStream 构造器。
- 程序运行过程中发现错误, 并且利用throw 语句抛出一个受查异常(下一节将详细地介绍throw 语句)。
- 程序出现错误, 例如,a[-l]=0 会抛出一个ArraylndexOutOffloundsException 这样的非受查异常。
- Java 虚拟机和运行时库出现的内部错误。
- 如果一个方法有可能抛出多个受查异常类型, 那么就必须在方法的首部列出所有的异常类。
class MyAnimation
{
public Image loadlmage(String s) throws FileNotFoundException, EOFException
}
- 如果在子类中覆盖了超类的一个方法, 子类方法中声明的受查异常不能比超类方法中声明的异常更通用。
如何抛出异常
对于一个已经存在的异常类, 将其抛出非常容易:
- 找到一个合适的异常类。
- 创建这个类的一个对象。
- 将对象抛出。
- 抛出的时异常类对象;
throw new EOFExceptionQ ;
- 一旦方法抛出了异常, 这个方法就不可能返回到调用者。