Javaのスローとスローの違い
コンテンツ
throwおよびthrowsは、例外処理で使用されるキーワードです。の スロー キーワードは、プログラマーが作成した例外のインスタンスをJVMに手動で引き渡すために使用されます。の 投げる メソッドで発生した例外を処理する責任を呼び出し元メソッドに引き継ぐために使用されるキーワード。 throwとthrowsの基本的な違いは、throwキーワードが例外オブジェクトを使用するのに対して、throwsキーワードは例外クラスの名前を使用することです。
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の基礎 | スロー | 投げる |
---|---|---|
ベーシック | throwキーワードは、作成された例外オブジェクトを手動でJVMに引き渡します。 | throwsキーワードは、例外処理の責任をメソッドの呼び出し元に委任するために使用されます。 |
構文 | Throwable-instanceをスローします。 | return_type method_name(parameter-list)がExceptionClass_listをスローします { //メソッドの本体 } |
に続く | throwキーワードの後に例外オブジェクトが続きます。 | throwsキーワードの後に、メソッドで発生する可能性のある例外クラスのリストが続きます。 |
スローされた例外の数 | throwキーワードは、単一の例外インスタンスをスローできます。 | throwsキーワードは、コンマで区切られた複数の例外クラスを宣言できます。 |
投げの定義
キーワード「スロー」を使用して、作成した例外インスタンスを手動でJVM(Java仮想マシン)に渡します。 「スロー」を使用して例外インスタンスをスローしないで例外が発生した場合、ランタイムシステムは内部的に例外インスタンスをJVMにスローし、プログラムは異常終了します。 throwキーワードの一般的な形式は次のとおりです。
Throwable_instanceをスローします。
Throwable_instanceの上は、Throwableクラスのオブジェクトでなければなりません。 int、float、charなどのプリミティブ型およびスロー不可クラスインスタンスは、throwキーワードを使用してスローできません。
キーワードスローを理解するための例を見てみましょう。
クラスTest {Public static void main(String args){throw new ArithmeticException( "/ by zero"); }}
上記のコードでは、キーワードthrowは、例外クラス「ArithmeticException」のインスタンスをスローします。 throwキーワードが使用されていなかった場合、main()メソッドは内部でJVMに渡される例外オブジェクトを作成していました。
キーワードスローについて覚えておくべきポイント:
- 例外オブジェクトを手動でJVMに引き渡します。
- ユーザー定義の例外またはカスタマイズされた例外に最適です。
- throwキーワードによってスローされた例外オブジェクトにメモリが割り当てられていない場合、ランタイム例外NullPointerExceptionが発生します。
- throwキーワードは、プログラムの発生直後にプログラムの実行を停止します。 throwステートメントの後にステートメントを直接書くことはできません。 throwステートメントの直後にステートメントを記述すると、コンパイラーはコンパイル中にエラー、到達不能ステートメントを表示します。
- Throwableクラスのオブジェクトのみが、throwキーワードを使用してスローできます。スローされたオブジェクトがThrowableクラスのオブジェクトではない場合、コンパイル時エラー「互換性のないタイプが見つかりました。 。 java.lang.Throwableが必要です」
注意:
throwキーワードは、C ++、JAVA、C#で手動で例外をスローするために使用されます。
スローの定義
「投げるキーワードは、メソッドで発生した例外を処理する責任をその呼び出し元メソッドに委任するために使用されます。呼び出し元のメソッドは、他のメソッドまたはJVMである可能性のある例外の処理を担当します。メソッドで発生する可能性のある例外クラスのリストを宣言します。
throwsキーワードを使用すると、メソッドで発生した例外は呼び出し元のメソッドで処理されるため、コンパイルエラーは発生しません。ただし、呼び出し元のメソッドは例外を処理するか、例外を処理する責任をその階層メソッドに委任する必要があります。ランタイム例外が発生すると、throwsキーワードを使用した後でも、プログラムの異常終了は防止されません。呼び出し元のメソッドがmain()の場合、デフォルトではJVMが例外を処理します。
throwsキーワードの一般的な形式は次のとおりです。
return_type method_name(parameter-list)throws exceptionClass_list {//メソッドの本体}
throwsキーワードはメソッドのシグネチャの後に表示され、メソッドで発生する可能性のある例外クラスのリストを含むことがわかります。キーワードがスローされた後に記述された例外クラスのリストは、コンマで区切られます。
throwsキーワードを理解するために1つの例を取り上げましょう。
calss Test {public static void main(String args)throws InterruptedException {thread sleep(10000); }}
上記のコードでは、sleep()メソッドを使用してメインスレッドをしばらくスリープ状態にします。これで、mainメソッドがスリープ状態のとき、他のスレッドがメインスレッドを中断する可能性があります。ただし、throwsキーワードはmain()メソッドのシグネチャの後に使用されるため、プログラムは簡単にコンパイルされます。 throwsキーワードは、チェック済み例外クラスInterruptedExceptionを宣言しています。現在、実行中に他のスレッドがメインスレッドを中断した場合、throwsキーワードはその例外をmain()メソッドの呼び出し元であるJVMに引き渡します。 JVMはプログラムを異常終了させます。
throwsキーワードについて覚えておくべきポイント:
- throwsキーワードは、チェックされた例外クラスを宣言するためにのみ使用されます。未チェックの例外にthrowsキーワードを使用しても、影響はありません。
- メソッドが独自に例外を処理したくない場合は、throwsキーワードを使用して、そのクラスの呼び出し元メソッドに例外を委任します。
- その使用は、プログラムのスムーズなコンパイルのみを許可します。
- 実行時に例外が発生した場合、throwsキーワードを使用した後でも、プログラムは異常終了します。
- 実行時に例外が発生した場合、プログラムの正常終了にはtry / catchブロックを使用することをお勧めします。
注意:
キーワードthrowsはJavaでのみ使用されます。 C ++およびC#はthrowsキーワードを使用しません。
- キーワードthrowは、例外処理の責任を手動でJVMに引き渡しますが、キーワードthrowは、例外処理の責任を、例外が発生したコードの呼び出し元メソッドに引き渡します。
- throwキーワードの後には、JVMに渡す例外オブジェクトが続きます。一方、throwsキーワードの後には、メソッドで発生する可能性のある例外クラスが続きます。
- throwキーワードは一度に1つの例外オブジェクトをスローできますが、throwsキーワードは一度にコンマで区切られた複数の例外クラスを宣言できます。
結論:
throwキーワードは、カスタマイズされた例外に最適です。 try / catchブロックは、throwsキーワードと比較して例外を処理するのに最適です。