这些Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本引入的改进,并可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发行说明。
当选择要抛出的异常类型时,你可以使用其他人编写的异常类 — Java平台提供了很多可以使用的异常类 — 也可以编写自己的异常类。如果回答以下问题中的任何一个是肯定的,那么你应该编写自己的异常类;否则,你可能可以使用别人的异常类。
假设你正在编写一个链表类。该类支持以下方法,以及其他方法:
objectAt(int n)
— 返回链表中第n
个位置的对象。如果参数小于0或大于当前链表中对象的数量,则抛出异常。firstObject()
— 返回链表中的第一个对象。如果链表中没有对象,则抛出异常。indexOf(Object o)
— 在链表中搜索指定的Object
并返回其位置。如果传入方法的对象不在链表中,则抛出异常。链表类可以抛出多个异常,如果能够使用一个异常处理程序捕获链表抛出的所有异常会很方便。此外,如果打算将链表分发在一个包中,所有相关的代码应该一起打包。因此,链表应该提供自己的一组异常类。
下图展示了链表抛出的异常可能的类层次结构。
示例异常类层次结构。
任何Exception
子类都可以作为LinkedListException
的父类。然而,快速查看这些子类会发现它们不适合,因为它们要么太专业化,要么与LinkedListException
完全无关。因此,LinkedListException
的父类应该是Exception
。
你编写的大多数小应用程序和应用程序都会抛出Exception
对象。 Error
通常用于系统中的严重错误,例如阻止JVM运行的错误。
Exception
类的类名称后面附加字符串Exception
是一个良好的做法。