Java 中丟擲多個異常

Mohd Ebad Naqvi 2023年10月12日
Java 中丟擲多個異常

本教程將演示如何在 Java 中丟擲多個異常。

異常是在程式執行期間破壞指令正常流程的不需要的和意外的事件。所有 Java 異常的根類都是 java.lang.Throwable。此類由 Error 和異常子類繼承。

為了處理異常,我們使用 try...catch 塊。

try 塊中,我們放置了可能引發一些異常的程式碼。try 塊不是單獨使用的。它必須始終跟在 catchfinally 之後。catch 塊用於捕獲異常。這個塊可以跟在 finally 塊之後。finally 塊用於執行程式的重要程式碼,無論是否有異常。

在 Java 中,我們可能要處理多個異常。在 Java 中不可能丟擲大量異常。我們可以指定多個異常,但只會丟擲其中一個。

但是,我們有一些替代方法可以用來模擬丟擲多個異常。

我們可以使用鏈式異常來處理多個異常。此類異常表明引發的異常是由另一個異常引起的。

例如,

public class Main {
  public static void main(String[] args) {
    try {
      NumberFormatException ex = new NumberFormatException("NumberFormatException is thrown");
      ex.initCause(new NullPointerException("NullPointerException is the main cause"));
      throw ex;
    }

    catch (NumberFormatException ex) {
      System.out.println(ex);
      System.out.println(ex.getCause());
    }
  }
}

輸出:

java.lang.NumberFormatException: NumberFormatException is raised
java.lang.NullPointerException: NullPointerException is the main cause

請注意 initCause()getCause() 方法的使用。initCause() 函式將異常的原因設定為另一個異常,而 getCause() 將返回異常的原因,在我們的例子中是 NullPointerException

我們也可以使用抑制異常。在這裡,我們將抑制的異常附加到主要異常。它是在 Java 7 中新增的。

為了附加被抑制的異常,我們使用 addSuppressed() 函式。我們將此函式與主要異常物件一起使用。

例如,

import java.io.*;
class Main {
  public static void main(String[] args) throws Exception {
    try {
      Exception suppressed = new NumberFormatException();
      Exception suppressed2 = new NullPointerException();

      final Exception exe = new Exception();

      exe.addSuppressed(suppressed);
      exe.addSuppressed(suppressed2);
      throw exe;

    }

    catch (Throwable e) {
      Throwable[] suppExe = e.getSuppressed();
      System.out.println("Suppressed:");
      for (int i = 0; i < suppExe.length; i++) {
        System.out.println(suppExe[i]);
      }
    }
  }
}

輸出:

Suppressed:
java.lang.NumberFormatException
java.lang.NullPointerException

在上面的示例中,我們將兩個異常附加到主物件並列印了被抑制的異常。為了獲得所有被抑制的異常,我們使用 getSuppressed() 函式。

相關文章 - Java Exception