工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Javaは複数の例外をキャッチします

Java が複数の例外をキャッチ

このチュートリアルでは、例を使って Java で複数の例外を処理する方法を学びます。

Java 7 より前は、コードの冗長性があっても、さまざまな種類の例外に対して複数の例外処理コードを記述する必要がありました。

例を見てみましょう。

例 1:複数の catch ブロック

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (ArithmeticException e) {
      System.out.println(e.getMessage());
    } catch (ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
    } 
  }
}

出力

/ by zero

この例では、次の 2 つの例外が発生する可能性があります:

catch の両方で例外メッセージを出力しています ブロック、つまり重複コード。

代入演算子 = の結合性 は右から左なので、ArithmeticException / by zero というメッセージで最初にスローされます .


catch ブロックで複数の例外を処理する

Java SE 7 以降では、単一の catch で複数のタイプの例外をキャッチできるようになりました ブロックします。

catch で処理できる各例外タイプ ブロックは縦棒またはパイプ | を使用して区切られます .

その構文は次のとおりです:

try {
  // code
} catch (ExceptionType1 | Exceptiontype2 ex) { 
  // catch block
}

例 2:マルチキャッチ ブロック

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
    }
  }
}

出力

/ by zero

単一の catch で複数の例外をキャッチする ブロックはコードの重複を減らし、効率を高めます。

このプログラムのコンパイル中に生成されるバイトコードは、複数の catch を持つプログラムよりも小さくなります。 コードの冗長性がないため、ブロックされます。

注: catch の場合 ブロックは複数の例外を処理します。catch パラメータは暗黙的に final です .これは、キャッチ パラメータに値を割り当てることができないことを意味します。


ベース例外のキャッチ

1 つの catch で複数の例外をキャッチする場合 ブロック、ルールは一般化されて特殊化されます。

これは、catch に例外の階層がある場合、 複数の特殊な例外をキャッチする代わりに、基本例外のみをキャッチできます。

例を見てみましょう。

例 3:基本例外クラスのみをキャッチする

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
}

出力

/ by zero

すべての例外クラスは Exception のサブクラスであることがわかっています クラス。したがって、複数の特殊な例外をキャッチする代わりに、単純に Exception をキャッチできます。 クラス。


catch で基底例外クラスがすでに指定されている場合 ブロック、同じ catch で子例外クラスを使用しないでください ブロック。そうしないと、コンパイル エラーが発生します。

例を見てみましょう。

例 4:基本例外クラスと子例外クラスのキャッチ

class Main {
  public static void main(String[] args) {
    try {
      int array[] = new int[10];
      array[10] = 30 / 0;
    } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) {
      System.out.println(e.getMessage());
    }
  }
}

出力

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

この例では、ArithmeticExceptionArrayIndexOutOfBoundsException 両方とも Exception のサブクラスです クラス。したがって、コンパイル エラーが発生します。


Java

  1. Java オペレーター
  2. Java コメント
  3. Java for-each ループ
  4. Java 文字列
  5. Java インターフェイス
  6. Java匿名クラス
  7. Java トライ...キャッチ
  8. Java スローとスロー
  9. Java try-with-resources
  10. Java アノテーション
  11. Java アサーション