複数の例外のキャッチについて学ぶ前に、Java の基本的な例外処理に精通している必要があります。ここからは、Java の try および catch ブロックに精通していることを前提としています。
Java ではなぜ複数の catch ブロックが必要なのでしょうか?
Java の複数の catch ブロックは、さまざまなタイプの例外を処理するために使用されます。Java 7 がリリースされる前は、特定の例外をキャッチするために特定の catch ブロックが必要でした。これにより、冗長なコードのブロックが作成され、非効率的なアプローチとなりました。キャッチされた例外を確認するには、次の例を見てください。さまざまな種類の例外に対して個別の catch ブロックを使用します。個別の Catch ブロックを使用した例
import java.util.Arrays;
public class ExceptionHandler {
public static void main(String[] args) {
Integer[] colorsOfASpectrum = { 7, 6, 5, 4, 3, 2, 1, 0 };
try {
System.out.println("Total number of options on a dice are: " + Arrays.toString(colorsOfASpectrum));
// un-comment the following line to see "Index Out of Bounds Exception"
// colorsOfASpectrum[10] = 7; // Index Out of Bounds Exception
System.out.println(colorsOfASpectrum[0] / 0); // Arithmetic Exception
} catch (ArrayIndexOutOfBoundsException e) {
// This catch block executes in case of "Index Out of Bounds Exception"
System.out.println("Array Index Out Of Bounds Exception " + e);
} catch (ArithmeticException e) {
// This catch block executes in case of "Arithmetic Exception"
System.out.println("Arithmetic Exception " + e);
}
System.out.println("\n----Rest of the code executes here----");
}
}
出力
スペクトル上の合計の色は次のとおりです: [7、6、5、4、3、2、1] 例外が発生しました java.lang.ArithmeticException: / by zero ----コードの残りの部分がここで実行されます----
ご覧のとおり、上記の例では、例外がスローされたときに別のブロックが実行されます。異なるタイプの例外をキャッチするための同じコード ブロックを使用して、複数の例外をキャッチするより効率的な方法があります。次の例を見てください。
Java での複数の Catch ブロックの使用例
import java.util.Arrays;
public class MultiExceptionHandler {
public static void main(String[] args) {
Integer[] colorsOfASpectrum = { 7, 6, 5, 4, 3, 2, 1 };
try {
System.out.println("Total colors on a spectrum are: " + Arrays.toString(colorsOfASpectrum));
// colorsOfASpectrum[10] = 7; // Index Out of Bounds Exception
System.out.println(colorsOfASpectrum[0] / 0); // Arithmetic Exception
} catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
// We don't need two different catch blocks for different kinds of exceptions
// Both exceptions will be handled using this multiple catch block
System.out.println("Exception Encountered " + e);
}
System.out.println("\n----Rest of the code executes here----");
}
}
出力
他の種類の例外を出力するには、13 行目のコメントを解除できます。
スペクトル上の合計の色は次のとおりです: [7、6、5、4、3、2、1] 例外が発生しました java.lang.ArithmeticException: / by zero ----コードの残りの部分がここで実行されます----
GO TO FULL VERSION