logo

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

Java マルチキャッチ ブロック

try ブロックの後には 1 つ以上の catch ブロックを続けることができます。各 catch ブロックには、異なる例外ハンドラーが含まれている必要があります。したがって、さまざまな例外の発生時にさまざまなタスクを実行する必要がある場合は、Java multi-catch ブロックを使用します。

留意すべき点

  • 一度に発生する例外は 1 つだけであり、一度に実行される catch ブロックは 1 つだけです。
  • すべての catch ブロックは、最も特殊なものから最も一般的なものの順に並べる必要があります。つまり、ArithmeticException の catch は、Exception の catch より前に来る必要があります。

マルチキャッチブロックのフローチャート

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

例1

Java multi-catch ブロックの簡単な例を見てみましょう。

MultipleCatchBlock1.java

 public class MultipleCatchBlock1 { public static void main(String[] args) { try{ int a[]=new int[5]; a[5]=30/0; } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
今すぐテストしてください

出力:

配列リスト.ソート
 Arithmetic Exception occurs rest of the code 

例 2

MultipleCatchBlock2.java

 public class MultipleCatchBlock2 { public static void main(String[] args) { try{ int a[]=new int[5]; System.out.println(a[10]); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
今すぐテストしてください

出力:

 ArrayIndexOutOfBounds Exception occurs rest of the code 

この例では、try ブロックに 2 つの例外が含まれています。ただし、一度に発生する例外は 1 つだけであり、それに対応する catch ブロックが実行されます。

MultipleCatchBlock3.java

 public class MultipleCatchBlock3 { public static void main(String[] args) { try{ int a[]=new int[5]; a[5]=30/0; System.out.println(a[10]); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
今すぐテストしてください

出力:

 Arithmetic Exception occurs rest of the code 

例 4

この例では、NullPointerException を生成しますが、対応する例外タイプを提供していません。このような場合、親例外クラスを含む catch ブロック 例外 呼び出されます。

MultipleCatchBlock4.java

リストノード
 public class MultipleCatchBlock4 { public static void main(String[] args) { try{ String s=null; System.out.println(s.length()); } catch(ArithmeticException e) { System.out.println('Arithmetic Exception occurs'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds Exception occurs'); } catch(Exception e) { System.out.println('Parent Exception occurs'); } System.out.println('rest of the code'); } } 
今すぐテストしてください

出力:

 Parent Exception occurs rest of the code 

例5

例外の順序 (つまり、最も特殊なものから最も一般的なもの) を維持せずに例外を処理する例を見てみましょう。

MultipleCatchBlock5.java

 class MultipleCatchBlock5{ public static void main(String args[]){ try{ int a[]=new int[5]; a[5]=30/0; } catch(Exception e){System.out.println('common task completed');} catch(ArithmeticException e){System.out.println('task1 is completed');} catch(ArrayIndexOutOfBoundsException e){System.out.println('task 2 completed');} System.out.println('rest of the code...'); } } 
今すぐテストしてください

出力:

 Compile-time error