Java で複数の例外をキャッチする

Rupam Yadav 2023年10月12日
  1. Java で複数の Catch ステートメントを使用して複数の例外をキャッチする
  2. Java で instanceOf を使用して複数の例外をキャッチする
  3. キャッチブロックで|を使用して複数の例外をキャッチする。Java で
Java で複数の例外をキャッチする

今日は、Java で複数の例外を使用してキャッチする方法を見ていきます。Java の例外は、実行時に不要なイベントが発生した場合に発生します。例外を確認する最も一般的な方法は、try-catch キーワードを使用することです。ここで、try にはチェックするコードのブロックが含まれ、catch には例外が発生したときに表示するコードが含まれています。

次の例を使用して、1 回のキャッチで複数の例外を使用する 3つの方法を確認します。

Java で複数の Catch ステートメントを使用して複数の例外をキャッチする

この例では、ユーザーから 2つの int 型入力を取得し、それらを分割して結果を表示します。このコードを try ブロックで囲んでいることに注意してください。これは、catch ブロックも必要であることを意味します。

入力された値が int タイプでない場合は InputMismatchException のように複数の例外がスローされ、num2 がゼロで除算された数値がないために値がゼロになる場合は ArithmeticException がスローされる場合があります。他のすべての例外の親である Exception をスローできます。

それらすべてをキャッチするために、例外タイプを含む 3つの異なる catch ブロックを記述し、その例外がいつ発生するかを示すメッセージを出力します。例外がない場合と例外がある場合の出力には、異なる結果が表示されます。

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiExceptions {
  public static void main(String[] args) {
    System.out.println("Enter two numbers: ");
    Scanner sc = new Scanner(System.in);
    try {
      System.out.println("num1: ");
      int num1 = sc.nextInt();

      System.out.println("num2: ");
      int num2 = sc.nextInt();

      int dividedNum = num1 / num2;

      System.out.println("After division result: " + dividedNum);

    } catch (InputMismatchException e1) {
      System.out.println("Error! - Please enter a number.");
    } catch (ArithmeticException e2) {
      System.out.println("Error! - You cannot divide any number with 0");
    } catch (Exception e3) {
      System.out.println("An error occurred please try again!");
    }
  }
}

出力 1:

Enter two numbers : num1 : 10 num2 : 2 After division result : 5

出力 2:

Enter two numbers : num1 : 50 num2 : hhh Error !-Please enter a number.

出力 3:

Enter two numbers : num1 : 10 num2 : 0 Error !-You cannot divide any number with 0

Java で instanceOf を使用して複数の例外をキャッチする

実行できる別のメソッドには、オブジェクトが指定されたタイプであるかどうかをチェックする instanceOf 関数の使用が含まれます。ブール値を返します。上記と同じ例を使用しますが、ここでは、複数の if ステートメントを持つ単一の catch ブロックを使用します。

上で説明したように、例外は最も一般的な例外の親クラスです。そのオブジェクトを使用して、スローされた例外が指定されたタイプであるかどうかを確認できます。ここでは、InputMismatchExceptionArithmeticException の 2つの例外を確認します。

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiExceptions {
  public static void main(String[] args) {
    System.out.println("Enter two numbers: ");
    Scanner sc = new Scanner(System.in);
    try {
      System.out.println("num1: ");
      int num1 = sc.nextInt();

      System.out.println("num2: ");
      int num2 = sc.nextInt();

      int dividedNum = num1 / num2;

      System.out.println("After division result: " + dividedNum);

    } catch (Exception e) {
      if (e instanceof InputMismatchException) {
        System.out.println("Error! - Please enter a number.");
      } else if (e instanceof ArithmeticException) {
        System.out.println("Error! - You cannot divide any number with 0");
      } else {
        System.out.println("An error occurred please try again!");
      }
    }
  }
}

出力:

Enter two numbers: 
num1: 
d
Error! - Please enter a number.

キャッチブロックで|を使用して複数の例外をキャッチする。Java で

Java 7 以降では、パイプ記号またはビットごとの OR を使用して、1つのキャッチで複数の例外を書き込むことができます。この例では、入力された 2つの数値を除算してから、2つの例外のいずれかが真であるかどうかを確認します。true の場合、エラーメッセージが出力されます。

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiExceptions {
  public static void main(String[] args) {
    System.out.println("Enter two numbers: ");
    Scanner sc = new Scanner(System.in);
    try {
      System.out.println("num1: ");
      int num1 = sc.nextInt();

      System.out.println("num2: ");
      int num2 = sc.nextInt();

      int dividedNum = num1 / num2;

      System.out.println("After division result: " + dividedNum);

    } catch (InputMismatchException | ArithmeticException e) {
      System.out.println("An error occurred please try again");
    }
  }
}

出力:

Enter two numbers: 
num1: 
f
An error occurred please try again
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Exception