Java 中的异常类

2025年8月5日 | 阅读 6 分钟

错误是程序执行时出现的问题、bug 或人为错误。异常会中断程序的流程并异常终止程序。不建议异常终止程序,为此,我们需要处理这些异常。

Java 提供了 Java.lang.Exception 类来处理异常,该类继承了 **Object** 和 **Throwable** 类的属性和方法。

java.lang.Throwable 类的方法

addSuppressed()、fillInStackTrace()、getCause()、getLocalizedMessage()、getMessage()、getStackTrace()、getSuppressed()、initCause()、printStackTrace()、printStackTrace()、printStackTrace()、setStackTrace() 和 toString()。

java.lang.Object 类的方法

clone()、equals()、finalize()、getClass()、hashCode()、notify()、notifyAll() 和 wait()。

Exception 类拥有一系列子类,用于处理不同类型的异常,例如 **IOException、NotBoundException** 和 **NotOwnerException** 等。

Exception 类的所有子类都以 Throwable 的形式存在,表示应用程序希望捕获的条件。

Exception 类提供了以下 5 个构造函数:

1. public Exception()

public Exception () 构造一个带有 null 详细消息的异常。可以通过后续调用 Throwable.initCause(Java.lang.Throwable) 来初始化 cause。这是一个默认构造函数,不接受消息和 Throwable cause 参数。

2. public Exception(String message)

public Exception( String message) 使用给定的详细消息构造一个新的异常。与默认构造函数一样,可以通过后续调用 Throwable.initCause(Java.lang.Throwable) 来初始化 cause。这是一个参数化构造函数,接受 String 类型的参数作为详细消息。详细消息会被保存,以便 Throwable.getMessage() 方法可以检索它。

参数

  1. message
    它是 String 类型的错误消息或详细消息。
  2. 3. public Exception(String message, Throwable cause)

    这是 Exception() 构造函数的另一种变体,它接受两个参数,即 **message** 和 **cause**。它使用给定的详细消息和 cause 构造一个新的异常。与 cause 关联的 **message** 不会自动包含在异常的详细消息中。

    参数

    1. message
      它是 String 类型的错误消息或详细消息。
    2. cause
      cause 会被保存,以便 Throwable.getCause() 方法可以检索它。null 值表示 cause 不存在或未知。

    4. public Exception(Throwable cause)

    这是 Exception() 构造函数的另一种变体,它只接受一个参数,即 **cause**。该构造函数会创建一个带有给定 cause 和 cause 的详细消息的 Exception。

    它主要用于对其他可抛出对象进行包装的异常。

    参数

    1. cause

    cause 会被保存,以便 Throwable.getCause() 方法可以检索它。null 值表示 cause 不存在或未知。

    5. protected Exception(String message, Throwable cause, Boolean enableSuppression, Boolean writableStackTrace)

    它与其他构造函数略有不同。它也是一个参数化构造函数,接受 4 个参数,即 **message、cause、enableSuppression** 和 **writableStackTrace**。

    它使用指定的参数创建一个异常。

    参数

    1. message
      这是一个详细的消息。
    2. cause
      cause 会被保存,以便 Throwable.getCause() 方法可以检索它。null 值表示 cause 不存在或未知。
    3. enableSuppression
      这是一个布尔值,用于确定是否启用抑制。
    4. writableStackTrace
      这是一个布尔值,用于确定堆栈跟踪是否可写。

    使用 Exception 类创建自定义异常

    Java 中有一系列预定义的异常。很多时候,我们需要创建自己的异常来处理错误。我们使用自定义异常来根据用户需求定制异常。

    让我们看一些 Exception 类的例子,并了解如何在 Java 中创建自己的 Exception。

    CustomExceptionExample1.java

    输出

    Exception Class in Java

    描述

    在上面的代码中,我们创建了一个自定义异常 InvalidAgeException。我们从用户那里获取输入,以检查用户是否有资格参加考试。我们通过将用户输入传递给 checkEligibility() 方法来调用它。checkEligibility() 方法检查给定的年龄是否大于 18,因为 18 岁及以上的用户才有资格参加考试。当方法发现年龄小于 18 时,它会抛出 InvalidAgeException。main() 方法中的 catch 块将处理此异常并打印异常的详细消息。

    CustomExceptionExample2.java

    输出

    Exception Class in Java

    描述

    在上面的代码中,我们创建了自定义异常 AlreadyExistException。我们从用户那里获取输入,将其添加到 languages ArrayList 中。我们通过将用户输入和 languages ArrayList 传递给 checkExistence() 方法来调用它。checkExistence() 方法检查给定的语言是否在 languages ArrayList 中。当方法发现用户输入的语言在 languages ArrayList 中时,它会抛出 AlreadyExistException。main() 方法中的 catch 块将处理此异常并打印异常的详细消息。如果 checkExistence() 方法在 languages ArrayList 中找不到给定的语言,它会将用户输入的语言添加到 languages ArrayList 中。