Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
术语 exception 是短语 "exceptional event (异常事件)" 的简写。
当方法中发生错误时,该方法会创建一个对象并将其交给运行时系统。该对象称为 exception object (异常对象),它包含有关错误的信息,包括错误的类型和错误发生时程序的状态。创建异常对象并将其交给运行时系统称为 throwing an exception (抛出一个异常)。
在一个方法抛出异常之后,运行时系统会尝试找到一些东西来处理它。处理异常的可能 "东西" 的集合,是已被调用的到达发生错误的方法的有序方法列表。该方法列表称为 call stack (调用推栈)(参见下图)。
调用堆栈。
运行时系统在调用堆栈中搜索包含可以处理异常的代码块的方法。这段代码称为 exception handler (异常处理程序)。搜索从发生错误的方法开始,并以调用方法的相反顺序继续浏览调用堆栈。找到适当的处理程序后,运行时系统会将异常传递给处理程序。如果抛出的异常对象的类型与处理程序可以处理的类型匹配,则认为异常处理程序是适当的。
异常处理程序的选择被称为 catch the exception (捕获异常)。如果运行时系统彻底搜索了调用堆栈上的所有方法,但没有找到适当的异常处理程序,如 下图 所示,则运行时系统(所以,连同程序)将终止。
在调用堆栈中搜索异常处理程序。
使用异常来管理错误比传统的错误管理技术有一些优势。你可以在 Advantages of Exceptions 部分了解更多信息。