# 什么是例外？

> 原文： [https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html)

术语 _ 异常 _ 是短语“异常事件”的简写。

* * *

**Definition:** An _exception_ is an event, which occurs during the execution of a program, that disrupts the normal flow of the program's instructions.

* * *

当方法中发生错误时，该方法会创建一个对象并将其交给运行时系统。该对象称为 _ 异常对象 _，包含有关错误的信息，包括错误发生时的类型和程序状态。创建异常对象并将其交给运行时系统称为 _ 抛出异常 _。

在方法抛出异常后，运行时系统会尝试查找要处理它的内容。处理异常的可能“某事”的集合是已被调用以获取发生错误的方法的有序方法列表。方法列表称为 _ 调用堆栈 _（参见下一个图）。

<center>![The call stack showing three method calls, where the first method called has the exception handler.](img/a3ada6aaec8cd7196e8ac704d5f246c3.jpg)

调用堆栈。

</center>

运行时系统在调用堆栈中搜索包含可处理异常的代码块的方法。这段代码称为 _ 异常处理程序 _。搜索从发生错误的方法开始，并按照调用方法的相反顺序继续通过调用堆栈。找到适当的处理程序后，运行时系统会将异常传递给处理程序。如果抛出的异常对象的类型与处理程序可以处理的类型匹配，则认为异常处理程序是合适的。

选择的异常处理程序称 _ 捕获异常 _。如果运行时系统穷举搜索调用堆栈上的所有方法而没有找到适当的异常处理程序，如下图所示，则运行时系统（以及程序）终止。

<center>![The call stack showing three method calls, where the first method called has the exception handler.](img/0d275d710fa7beac49efa736d9ad13f5.jpg)

在调用堆栈中搜索异常处理程序。

</center>

使用异常来管理错误与传统的错误管理技术相比具有一些优势。您可以在[例外优势](advantages.html)部分了解更多信息。