Java 自定义异常

2025年5月29日 | 阅读 4 分钟

在 Java 中,我们可以创建自己的异常来处理特定的应用程序需求。自定义异常是 Exception 类的派生类。自定义异常也称为用户定义异常。基本上,Java 自定义异常用于根据用户的需求来定制异常。

此异常要么继承 Exception 类,要么继承 RuntimeException 类(用于不可检查异常)。通过自定义异常,我们可以拥有自己的异常和消息。

自定义异常示例

考虑以下示例,我们在其中创建了一个名为 WrongFileNameException 的自定义异常。

在这里,我们将一个字符串传递给了超类(即 Exception 类)的构造函数,该字符串可以通过创建对象后调用 getMessage() 方法获得。

注意:我们需要编写一个接受 String 作为错误消息的构造函数,并调用父类构造函数。

为什么使用自定义异常?

Java 异常几乎涵盖了代码执行期间可能发生的所有一般类型的异常。但是,我们有时需要创建自定义异常。

以下是使用自定义异常的一些原因:

  • 它表示应用程序特定的错误。
  • 捕获并为现有 Java 异常的子集提供特定的处理。
  • 业务逻辑异常:这些是与业务逻辑和工作流程相关的异常。它有助于用户和开发人员以有意义的方式理解确切的问题。
  • 它提供清晰、描述性的错误消息,便于调试。

创建自定义异常

要创建自定义异常,请遵循以下步骤:

  1. 首先,继承 java.lang 包中的 Exception 类(用于可检查异常)或 RuntimeException 类(用于不可检查异常)。
  2. 使用构造函数初始化带有自定义消息的异常。
  3. 可以根据需要添加方法来提供有关异常的更多详细信息。

让我们看一个 Java 自定义异常的示例。

示例 1:创建自定义异常

在以下 Java 代码中,InvalidAgeException 的构造函数接受一个字符串作为参数。此字符串通过 super() 方法传递给父类 Exception 的构造函数。此外,Exception 类的构造函数可以在不使用参数的情况下调用,调用 super() 方法不是强制性的。

示例

编译并运行

输出

Caught the exception
An exception occurred: InvalidAgeException: age is not valid to vote
rest of the code...

示例 2:捕获异常

示例

编译并运行

输出

Caught the exception
null
rest of the code...

Java 自定义异常选择题

1. 关于 Java 中的自定义异常,以下哪项是真的?

  1. 自定义异常必须直接继承 Throwable 类。
  2. 自定义异常只能是可检查异常。
  3. 自定义异常必须继承 Exception 类或其子类。
  4. Java 不允许创建自定义异常。

答案:3)

解释:在 Java 中,自定义异常通常通过继承 Exception 类(可检查异常)或 RuntimeException(不可检查异常)来创建。它们不需要直接继承 Throwable。


2. 以下哪个方法用于检索传递给自定义异常的消息?

  1. printMessage()
  2. getMsg()
  3. retrieveMessage()
  4. getMessage()

答案:4)

解释:getMessage() 方法是从 Throwable 类继承的,用于返回异常的详细消息。


3. 如果我们在自定义异常构造函数中不调用 super() 会发生什么?

  1. 编译错误
  2. 运行时错误
  3. 它会编译并运行,但异常消息将为 null
  4. JVM 不允许创建自定义异常

答案:3)

解释:如果没有显式地使用消息调用 super(),默认情况下会调用不带参数的基类构造函数,异常消息将为空字符串或 null,具体取决于基异常类的构造函数行为。


4. 我们为什么要使用 Java 中的自定义异常?

  1. 处理应用程序特定和与业务逻辑相关的异常
  2. Java 不支持内置异常
  3. 自定义异常比内置异常快
  4. 以减少内存使用

答案:1)

解释:自定义异常用于捕获和清晰地表达使用内置异常无法清楚传达的领域特定或业务逻辑错误。


5. 在自定义异常类 InvalidAgeException 中,在其构造函数中调用 super(str) 的目的是什么?

  1. 它创建一个新的 Exception 类对象。
  2. 它将错误消息传递给 Exception 类的构造函数。
  3. 它将错误消息打印到控制台。
  4. 它会停止程序的执行。

答案:2)

解释:super(str) 调用用于将错误消息传递给父类 Exception,这允许稍后使用 getMessage() 检索消息。


下一主题Java 内部类