Javaで投げて投げる

Java では、例外処理は、アプリケーションの通常のフローを維持できるように実行時エラーを処理する効果的な手段の 1 つです。 NullPointerException ArrayIndexOutOfBoundsException などの実行時エラーを処理します。これらのエラーを効果的に処理するために、Java は 2 つのキーワード throw と throw を提供します。

Javaスロー

Java の throw キーワードは、メソッドまたはコードのブロックから明示的に例外をスローするために使用されます。チェック済み例外またはチェックなし例外をスローできます。 throw キーワードは主にカスタム例外をスローするために使用されます。 

構文:

投げる 実例

ここで、instance は Throwable 型のオブジェクト (または Exception などのそのサブクラス) です。

例:

throw new ArithmeticException('/ by zero');

ただし、この例外、つまりインスタンスは次のタイプでなければなりません 投擲可能 またはのサブクラス 投擲可能 。 

プログラムの実行フローは、throw ステートメントが実行され、最も近い囲みステートメントの直後に停止します。 試す ブロックがチェックされ、 キャッチ 例外の種類に一致するステートメント。一致が見つかった場合、制御はそのステートメントに転送され、それ以外の場合は次に囲みます。 試す ブロックがチェックされるなどです。一致しない場合 キャッチ が見つかると、デフォルトの例外ハンドラーがプログラムを停止します。 

例: この例では、例外がスローされ、メソッド内でキャッチされ、再スローされる場所を示します。

Java
   class   Geeks     {      static     void     fun  ()      {      try     {      throw     new     NullPointerException  (  'demo'  );      }      catch     (  NullPointerException     e  )     {      System  .  out  .  println  (  'Caught inside fun().'  );      throw     e  ;     // rethrowing the exception      }      }      public     static     void     main  (  String     args  []  )      {      try     {      fun  ();      }      catch     (  NullPointerException     e  )     {      System  .  out  .  println  (  'Caught in main.'  );      }      }   }   

出力
Caught inside fun(). Caught in main.  

説明: 上記の例は、明示的に NullPointerException をスローするための throw キーワードの使用を示しています。例外は内部でキャッチされます 楽しい() メソッドで再スローされ、 main() メソッドでキャッチされます。

例: この例では、算術例外を示します。

Java
   // Throwing an arithmetic exception   class   Geeks     {      public     static     void     main  (  String  []     args  ){      int     numerator     =     1  ;      int     denominator     =     0  ;      if     (  denominator     ==     0  )     {      // Manually throw an ArithmeticException      throw     new     ArithmeticException  (  'Cannot divide by zero'  );      }     else     {      System  .  out  .  println  (  numerator     /     denominator  );      }      }   }   

出力:

 Hangup (SIGHUP)   
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)

説明: 上記の例は、ゼロ除算により ArithmeticException が明示的にスローされる throw を使用した例外を示しています。

Java スロー

投げる Java のキーワードで、メソッドのシグネチャで使用され、このメソッドがリストされたタイプの例外の 1 つをスローする可能性があることを示します。これらのメソッドの呼び出し元は、try-catch ブロックを使用して例外を処理する必要があります。 

構文:

type method_name(parameters) は例外リストをスローします

ここで、Exception_list は、メソッドがスローする可能性のあるすべての例外のカンマ区切りのリストです。

プログラム内で例外が発生する可能性がある場合、コンパイラは常にそれについて警告し、チェックされた例外を処理する必要があります。そうでないと、報告されていない例外 XXX をキャッチするか、スローするように宣言する必要があるというコンパイル時エラーが発生します。このコンパイル時エラーを防ぐために、次の 2 つの方法で例外を処理できます。 

  1. トライキャッチを使うことで
  2. を使用することで、 投げる キーワード

throws キーワードを使用して例外処理の責任を呼び出し元 (メソッドまたは JVM の場合もあります) に委任すると、呼び出し元のメソッドがその例外を処理する責任を負います。  

例 1: 未処理の例外

Java
   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Thread  .  sleep  (  10000  );      System  .  out  .  println  (  'Hello Geeks'  );      }   }   

出力:

 error: unreported exception InterruptedException; must be caught or declared to be thrown  

説明: 上記のプログラムでは、コンパイル時エラーが発生します。これは、メインスレッドがスリープ状態になると、他のスレッドが main() メソッドを実行する機会を得て、InterruptedException が発生する例外が発生する可能性があるためです。 

例 2: 使用例 throws 例外を処理する

Java
   class   Geeks     {      public     static     void     main  (  String  []     args  )      throws     InterruptedException      {      Thread  .  sleep  (  10000  );      System  .  out  .  println  (  'Hello Geeks'  );      }   }   

出力:

 Hello Geeks  

説明: 上記のプログラムでは、 throws キーワードを使用して、 中断された例外 そして次のような出力が得られます こんにちは、ギークの皆さん。

例 3: で例外をスローする throws

Java
   class   Geeks     {      static     void     fun  ()     throws     IllegalAccessException      {      System  .  out  .  println  (  'Inside fun(). '  );      throw     new     IllegalAccessException  (  'demo'  );      }      public     static     void     main  (  String     args  []  )      {      try     {      fun  ();      }      catch     (  IllegalAccessException     e  )     {      System  .  out  .  println  (  'Caught in main.'  );      }      }   }   

出力
Inside fun(). Caught in main.  

説明: 上記の例では、メソッドから IllegalAccessException をスローし、try-catch ブロックを使用して main メソッドでそれを処理しています。

スローとスローの違い

Java における throw と throws の主な違いは次のとおりです。

投げる

投げる

明示的に例外をスローするために使用されます。

これは、メソッドが 1 つ以上の例外をスローする可能性があることを宣言するために使用されます。

これはメソッドまたはコードのブロック内で使用されます。

メソッドのシグネチャで使用されます。

チェック済み例外とチェックなし例外の両方をスローできます。

これはチェックされた例外にのみ使用されます。チェックされていない例外には必要ありません 投げる

メソッドまたはブロックが例外をスローします。

メソッドの呼び出し元は例外を処理する責任があります。

現在の実行フローを直ちに停止します。

これにより、呼び出し元は宣言された例外を処理するように強制されます。

throw new ArithmeticException('Error');

public void myMethod() は IOException {} をスローします