Java では、例外処理は、アプリケーションの通常のフローを維持できるように実行時エラーを処理する効果的な手段の 1 つです。 NullPointerException ArrayIndexOutOfBoundsException などの実行時エラーを処理します。これらのエラーを効果的に処理するために、Java は 2 つのキーワード throw と throw を提供します。
Javaスロー
Java の throw キーワードは、メソッドまたはコードのブロックから明示的に例外をスローするために使用されます。チェック済み例外またはチェックなし例外をスローできます。 throw キーワードは主にカスタム例外をスローするために使用されます。
構文:
投げる 実例
ここで、instance は Throwable 型のオブジェクト (または Exception などのそのサブクラス) です。
例:
throw new ArithmeticException('/ by zero');
ただし、この例外、つまりインスタンスは次のタイプでなければなりません 投擲可能 またはのサブクラス 投擲可能 。
プログラムの実行フローは、throw ステートメントが実行され、最も近い囲みステートメントの直後に停止します。 試す ブロックがチェックされ、 キャッチ 例外の種類に一致するステートメント。一致が見つかった場合、制御はそのステートメントに転送され、それ以外の場合は次に囲みます。 試す ブロックがチェックされるなどです。一致しない場合 キャッチ が見つかると、デフォルトの例外ハンドラーがプログラムを停止します。
RSAのアルゴリズム
例: この例では、例外がスローされ、メソッド内でキャッチされ、再スローされる場所を示します。
Javaclass 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 つの方法で例外を処理できます。
- トライキャッチを使うことで
- を使用することで、 投げる キーワード
throws キーワードを使用して例外処理の責任を呼び出し元 (メソッドまたは JVM の場合もあります) に委任すると、呼び出し元のメソッドがその例外を処理する責任を負います。
例 1: 未処理の例外
Javaclass 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 例外を処理する
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 {} をスローします |