本文共 1167 字,大约阅读时间需要 3 分钟。
参考:Java核心技术 卷I 基础知识 第七章
异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器。
所有的异常都是由Throwable继承而来,但在下一层立即分解为两个分支:Error和Exception。
Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全地终止之外,再也无能为力了。
在设计Java程序时,需要关注Exception层次结构。这个层次结构又分解为两个分支。一个分支派生于RuntimeException,另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException,而程序本身没有问题。但由于像I/O错误这类问题导致的异常属于其他异常。
派生于RuntimeException的异常包含下面几种情况:
不是派生于RuntimeException的异常包括:
Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受检查异常。所有的其它异常称为受查异常。
在遇到下面四种情况时应该抛出异常:
(1)调用一个抛出受查异常的方法
(2)程序运行过程中发现错误,并且利用throw语句抛出一个受查异常
(3)程序出现错误。例如a[-1]=0会抛出一个ArrayIndexOutOfBoundsException这样的非受查异常
(4)Java虚拟机和运行时库出现的内部错误
总之,一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。如果方法没有声明所有可能发生的受查异常,编译器就会发出一个错误消息。
通常应该捕获那些知道如何处理的异常,而将那些不知道怎样处理的异常继续进行传递。
在catch子句中可以抛出异常,目的是改变异常类型。
堆栈轨迹是一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。
异常机制使用的几个技巧:
断言机制允许在测试期间向代码中插入一些检查语句,当代码发布时,这些插入的检测语句会被自动地移走。
当启用或禁用断言时,不必重新编译程序,启用或禁用断言是类加载器的功能。
使用断言的时间:
转载地址:http://eryai.baihongyu.com/