# 创建异常类

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

当面对选择要抛出的异常类型时，您可以使用其他人编写的异常 - Java 平台提供了许多可以使用的异常类 - 或者您可以编写自己的异常类。如果您对以下任何问题的回答是肯定的，您应该编写自己的异常类;否则，你可能会使用别人的。

*   您是否需要 Java 平台中未表示的异常类型？
*   如果他们可以将您的异常与其他供应商编写的类别所引发的异常区分开来，它会帮助用户吗？
*   您的代码是否会抛出多个相关的异常？
*   如果您使用其他人的例外，用户是否可以访问这些例外？一个类似的问题是，你的包裹是独立的还是独立的？

## 一个例子

假设您正在编写链表类。该类支持以下方法，其中包括：

*   **`objectAt(int n)`** - 返回列表中`n`位置的对象。如果参数小于 0 或大于列表中当前对象的数量，则引发异常。
*   **`firstObject()`** - 返回列表中的第一个对象。如果列表不包含任何对象，则抛出异常。
*   **`indexOf(Object o)`** - 在列表中搜索指定的`Object`并返回其在列表中的位置。如果传递给方法的对象不在列表中，则抛出异常。

链表类可以抛出多个异常，并且能够通过一个异常处理程序捕获链表所引发的所有异常是很方便的。此外，如果您计划在包中分发链接列表，则应将所有相关代码打包在一起。因此，链表应该提供自己的一组异常类。

下一个图说明了链表引发的异常的一个可能的类层次结构。

![A possible class hierarchy for the exceptions thrown by a linked list.](img/456171234b3743034ff16d6f886d47e6.jpg)

示例异常类层次结构。



## 选择超类

任何`Exception`子类都可以用作`LinkedListException`的父类。但是，快速阅读这些子类表明它们不合适，因为它们太专业化或与`LinkedListException`完全无关。因此，`LinkedListException`的父类应为`Exception`。

您编写的大多数 applet 和应用程序将抛出`Exception`的对象。 `Error`通常用于系统中严重的硬错误，例如阻止 JVM 运行的错误。

* * *

**Note:** For readable code, it's good practice to append the string `Exception` to the names of all classes that inherit (directly or indirectly) from the `Exception` class.

* * *