Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9和后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发行说明。
异常(exception)是“异常事件”一词的简写。
当方法内部发生错误时,该方法会创建一个对象并将其传递给运行时系统。这个对象被称为异常对象(exception object),它包含有关错误的信息,包括错误的类型和错误发生时程序的状态。创建异常对象并将其传递给运行时系统被称为抛出异常(throwing an exception)。
方法抛出异常后,运行时系统会尝试找到处理它的方法。可以处理异常的“东西”是一系列被调用的方法,这些方法的顺序是从调用发生错误的方法开始的。这些方法的列表被称为调用栈(参见下图)。
调用栈。
运行时系统会在调用栈中搜索包含可以处理异常的代码块的方法。这个代码块被称为异常处理程序(exception handler)。搜索从发生错误的方法开始,并按照方法被调用的相反顺序进行。当找到一个合适的处理程序时,运行时系统会将异常传递给处理程序。如果抛出的异常对象的类型与处理程序可以处理的类型相匹配,则认为该异常处理程序是合适的。
所选择的异常处理程序被称为捕获异常(catch the exception)。如果运行时系统在调用栈上逐一搜索所有方法后仍未找到合适的异常处理程序,如下图所示,运行时系统(以及程序本身)会终止。
在调用栈中搜索异常处理程序。
使用异常来管理错误相对于传统的错误管理技术具有一些优势。您可以在异常的优势部分了解更多信息。