创建异常类

在选择要引发的异常类型时,您可以使用别人编写的异常类型(Java 平台提供了很多可以使用的异常类),也可以编写自己的异常类型。如果对以下任何一个问题的回答为是,则应编写自己的异常类;否则,您可能可以使用别人的。

  • 您是否需要 Java 平台中没有的异常类型?

  • 如果他们可以将您的异常与其他供应商编写的类所抛出的异常区分开来,它将对用户有帮助吗?

  • 您的代码是否抛出多个相关异常?

  • 如果您使用其他人的 exception,用户是否可以访问这些 exception?一个类似的问题是,您的package是否应该独立且自成体系?

An Example

假设您正在编写一个链表类。该类支持以下方法,其中包括:

  • objectAt(int n) -返回列表中第n位置的对象。如果参数小于 0 或大于列表中当前对象的数量,则引发异常。

  • firstObject() -返回列表中的第一个对象。如果列表不包含任何对象,则引发异常。

  • indexOf(Object o) -在列表中搜索指定的Object,并返回其在列表中的位置。如果传递给方法的对象不在列表中,则引发异常。

链表类可以引发多个异常,并且能够使用一个异常处理程序catch链表所引发的所有异常会很方便。另外,如果您打算将链接列表分发到一个包中,则所有相关代码都应打包在一起。因此,链表应提供自己的一组异常类。

下图说明了链表抛出的异常的一种可能的类层次结构。

链表抛出的异常的可能的类层次结构。

示例异常类层次结构。

选择超类

任何Exception子类都可用作LinkedListException的父类。但是,快速浏览这些子类表明它们不合适,因为它们过于专业化或与LinkedListException完全无关。因此,LinkedListException的父类应为Exception

您编写的大多数 Servlets 和应用程序都会抛出Exception s 的对象。 Error s 通常用于系统中的严重硬错误,例如那些导致 JVM 无法运行的错误。

Note:

对于可读的代码,最好将字符串Exception附加到从Exception类继承(直接或间接)的所有类的名称。