Java の連鎖例外

Java の連鎖例外

Java の連鎖例外を使用すると、ある例外を別の例外に関連付けることができます。つまり、1 つの例外が別の例外の原因を説明します。

  • たとえば、メソッドが 算術例外 ゼロで除算しようとしたため。
  • しかし、エラーの根本原因は、除数がゼロになる I/O 障害でした。
  • このような場合、連鎖例外は、エラーの主な原因と根本的な原因の両方を伝播するのに役立ちます。

: 次の例は、Java で連鎖例外を使用する方法を示しています。

Java
   // Working of chained exceptions   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {      try     {          // Creating an exception      NumberFormatException     ex     =     new     NumberFormatException  (  'Primary Exception'  );      // Setting the cause of the exception      ex  .  initCause  (  new     NullPointerException  (  'Root cause of the exception'  ));      // Throwing the exception with a cause      throw     ex  ;      }         catch     (  NumberFormatException     ex  )     {          // Displaying the primary exception      System  .  out  .  println  (  'Caught Exception: '     +     ex  );      // Displaying the root cause of the exception      System  .  out  .  println  (  'Cause of Exception: '     +     ex  .  getCause  ());      }      }   }   

出力
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception  

注記: ネストされた例外とも呼ばれる連鎖例外を使用すると、Java で原因を例外に関連付けることができます。これは、例外の元の原因に関する情報を伝達したい場合に便利です。

コンストラクター

  • Throwable(投げられる原因) : ここで、「原因」は、現在の例外を引き起こした例外です。
  • Throwable(String msg スロー可能な原因) : msg は例外メッセージ、cause は現在の例外の原因となった例外です。

連鎖例外をサポートするスロー可能メソッド

  1. getCause() : このメソッドは、例外の実際の原因を返します。
  2. initCause(スロー可能な原因) : このメソッドは、呼び出し例外の原因を設定します。

例: 連鎖例外を含むカスタム メッセージの使用

Java では、Throwable クラスのコンストラクターを使用して例外を連鎖させることができます。

Java
   // Use a custom message with chained exception   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {      try     {          // Code that might throw an exception      int  []     n     =     new     int  [  5  ]  ;      int     divisor     =     0  ;      for     (  int     i     =     0  ;     i      <     n  .  length  ;     i  ++  )     {      int     res     =     n  [  i  ]     /     divisor  ;      System  .  out  .  println  (  res  );      }      }         catch     (  ArithmeticException     e  )     {          // Creating a new exception with       // the original as the cause      throw     new     RuntimeException      (  'Error: Division by zero occurred'       e  );      }      }   }   

出力:

出力

説明: この例では、整数の配列であり、除数を 0 に設定します。

  • try ブロック内で、配列の各要素を 0 で除算しようとすると、ArithmeticException がスローされます。
  • この ArithmeticException は catch ブロックでキャッチされ、そこで元の例外 (ArithmeticException など) を原因として新しい RuntimeException が作成されます。
  • RuntimeExceptionが捕捉されないため、RuntimeExceptionとArithmeticExceptionを含むスタックトレースが表示されます。

連鎖例外の利点:

連鎖例外の利点を以下に示します。

  • この例外は、主な原因と根本原因の両方に関する詳細を提供するため、デバッグに役立ちます。
  • 完全な例外コンテキストの伝播を有効にすることにより、エラー処理が簡素化されます。
  • これにより、複雑なアプリケーションにおけるエラーの追跡可能性が向上します。

連鎖例外の欠点:

  • 適切に使用しないと、スタック トレースが長くなり、読みにくくなる可能性があります。
  • 過度に使用すると、例外が不必要に連鎖した場合に、わかりにくいエラー メッセージが発生する可能性があります。
  • 開発者は、意味のある原因がリンクされていることを確認する必要があります。そうしないと、デバッグ中に誤解を招く可能性があります。
おすすめのクイズ クイズの編集 3 つの質問

Java における連鎖例外の主な目的は何ですか?

  • 例外の根本原因を隠すには

  • B

    ある例外を別の例外に関連付けるには

  • C

    コードのパフォーマンスを向上させるには

  • D

    実行時エラーを自動的に修正するには

説明:

連鎖例外を使用すると、ある例外を別の例外にリンクして根本原因を示すことができます。

例外の原因を設定するにはどの方法が使用されますか?

  • getMessage()

  • B

    setException()

  • C

    initCause()

  • D

    initCause()

説明:

initCause() メソッドは、例外の根本的な原因を設定します。

この例では、NumberFormatException の原因としてどのような種類の例外が設定されていますか?

  • IO例外

  • B

    算術例外

  • C

    NullPointerException

  • D

    ランタイム例外

説明:

この例では、NumberFormatException の原因として NullPointerException を設定します。

Java の連鎖例外クイズは正常に完了しました スコア :   2 /3 正確さ :  0% ログインして説明を見る 1 /3 1 /3 < Previous 次へ >