Java 中丟擲多個異常

Mohd Ebad Naqvi 2022年1月14日 2021年10月2日
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