异常

在Java语言中,是使用“异常(exception)”来处理错误及其他异常事件。术语“异常”是短语“异常事件(exceptional event)”的缩写。

异常是在程序执行期间发生的事件,它会中断程序指令的正常流程。

当在方法中发生错误时,该方法创建一个对象并将其移交给运行时系统。 该对象称为“异常对象(exception object)”,包含有关错误的信息,包括错误发生时其类型和程序的状态。 创建异常对象并将其移交给运行时系统,这个过程被称为“抛出异常(throwing an exception)”。

在方法抛出异常后,运行时系统会尝试寻找一些方式来处理它。 这个方法列表被叫做“调用堆栈(call stack)”,调用方式如下图所示(参见下图)。

异常 - 图1

运行时系统搜寻包含能够处理异常的代码块的方法所请求的堆栈。这个代码块叫做“异常处理器( exception handler)”,搜寻首先从发生的方法开始,然后依次按着调用方法的倒序检索调用堆栈。当找到一个相应的处理器时,运行时系统就把异常传递给这个处理器。一个异常处理器要适当地考虑抛出的异常对象的类型与异常处理器所处理的异常的类型是否匹配。

当异常处理器被选中时,称为“捕获异常(catch the exception)”。异常被捕获以后,异常处理器关闭。如果运行时系统搜寻了这个方法的所有调用堆栈,而没有找到相应的异常处理器,如下图所示,运行进系统将终止执行。

异常 - 图2

使用异常来管理错误比传统的错误管理技术有一些优势。见“使用异常带来的优势”一节。