logo

Javaで投げて投げる

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

Javaスロー

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

構文:



投げる 実例

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

例:

throw new ArithmeticException('/ by zero');

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

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

RSAのアルゴリズム

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

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 の主な違いは次のとおりです。

投げる

投げる

Javaで配列に追加する

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

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

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

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

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

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

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

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

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

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

throw new ArithmeticException('Error');

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