推奨されます, 2019

エディターズチョイス

Javaでのthrowとthrowの違い

throwとthrowsは、例外処理で使用されるキーワードです。 throwキーワードは、プログラマによって作成された例外のインスタンスを手動でJVMに渡すために使用されます。 メソッドで発生した例外を処理する責任を呼び出し元のメソッドに引き継ぐために使用されるthrowsキーワード。 throwとthrowsの基本的な違いは、throwキーワードは例外オブジェクトを使用するのに対し、throwsキーワードは例外クラスの名前を使用することです。

比較表

比較の基礎スロー投げる
基本throwキーワードは、作成した例外オブジェクトを手動でJVMに渡します。throwsキーワードは、例外処理の責任をメソッドの呼び出し元に委任するために使用されます。
構文Throwable-instanceをスローします。return_type method_name(parameter-list)は、ExceptionClass_listをスローします。
{
//メソッド本体
}
に続くthrowキーワードの後に​​例外オブジェクトが続きます。throwsキーワードの後に​​は、メソッド内で発生する可能性がある例外クラスのリストが続きます。
スローされた例外の数throwキーワードは単一の例外インスタンスをスローすることができます。throwsキーワードでは、カンマで区切って複数の例外クラスを宣言できます。

スローの定義

キーワード「 throw 」は、作成した例外インスタンスを手動でJVM(Java Virtual Machine)に渡すために使用されます。 「throw」を使用して例外インスタンスをスローしないで例外が発生した場合、ランタイムシステムは例外インスタンスを内部的にJVMにスローし、プログラムは異常終了します。 throwキーワードの一般形式は次のとおりです。

 Throwable_instanceをスローします。 

Throwable_instanceより上はThrowableクラスのオブジェクトでなければなりません。 int、float、charなどのプリミティブ型、およびスローできないクラスのインスタンスは、throwキーワードを使用してスローすることはできません。

キーワードthrowを理解するために例を挙げましょう。

 クラステスト{public static void main(String [] args){新しいArithmeticExceptionをスローします( "/ by zero"); }} 

上記のコードでは、キーワードthrowはExceptionクラス「ArithmeticException」のインスタンスをスローします。 throwキーワードが使用されていなかった場合、main()メソッドは内部的にJVMに渡される例外オブジェクトを作成していたでしょう。

キーワードthrowについて覚えておくべきポイント:

  • 例外オブジェクトを手動でJVMに渡します。
  • ユーザー定義の例外またはカスタマイズされた例外に最適です。
  • throwキーワードによってスローされた例外オブジェクトにメモリが割り当てられていない場合は、ランタイム例外NullPointerExceptionが発生します。
  • throwキーワードは、その発生直後にプログラムの実行を停止します。 throw文の後に直接文を書くことはできません。 throw文の直後に文を書いた場合、コンパイラはコンパイル中にエラー、到達不可能な文を表示します。
  • Throwableクラスのオブジェクトのみがthrowキーワードを使用してスローされます。 スローされたオブジェクトがThrowableクラスのオブジェクトではない場合は、コンパイル時エラー「互換性のない型が見つかりました」が表示されます。 。 java.lang.Throwableが必要です

注意:

throwキーワードは、C ++、JAVA、C#で手動で例外をスローするために使用されます。

投げの定義

throws ”キーワードは、メソッド内で発生した例外を処理する責任を呼び出し側のメソッドに委任するために使用されます。 呼び出し元メソッドは、他のメソッドまたはJVMである可能性がある例外の処理を担当します。 メソッド内で発生する可能性がある例外クラスのリストを宣言します。

throwsキーワードを使用すると、メソッド内で発生した例外は呼び出し元のメソッドによって処理されることになるので、コンパイルエラーは発生しません。 ただし、呼び出し側メソッドは例外を処理するか、または例外を処理する責任をその階層メソッドに委任する必要があります。 実行時例外が発生した場合、throwsキーワードを使用した後でも、プログラムの異常終了を防ぐことはできません。 呼び出し元のメソッドがmain()の場合、デフォルトではJVMが例外を処理します。

throwsキーワードの一般形式は、次のとおりです。

 return_type method_name(parameter-list)は、exceptionClass_list {//メソッドの本体}をスローします。 

throwsキーワードがメソッドのシグニチャの後に表示され、メソッド内で発生する可能性がある例外クラスのリストを含むことができます。 キーワードがスローされた後に書き込まれた例外クラスのリストは、コンマで区切られています。

throwsキーワードを理解するための一例を見てみましょう。

 calssテスト{public static void main(String [] args)InterruptedExceptionがスローされます{スレッドのスリープ(10000); }} 

上記のコードでは、sleep()メソッドを使用してメインスレッドをしばらくスリープ状態にします。 現在、mainメソッドがスリープ状態にあるとき、他のスレッドがメインスレッドに割り込む可能性があります。 しかし、throwsキーワードはmain()メソッドのシグネチャの後に使用されるので、プログラムは簡単にコンパイルされます。 throwsキーワードは、チェック済み例外クラスInterruptedExceptionを宣言しています。 実行時に他のスレッドがメインスレッドに割り込むと、throwsキーワードによってその例外がJVMであるmain()メソッドの呼び出し元に渡されます。 JVMはプログラムを異常終了させます。

throwsキーワードについて覚えておくべきポイント:

  • throwsキーワードは、チェック済み例外クラスを宣言するためにのみ使用されます。 未チェックの例外に対してthrowsキーワードを使用しても影響はありません。
  • メソッドが単独で例外を処理したくない場合は、throwsキーワードを使用してそのクラスの呼び出し側メソッドにその例外を委任します。
  • その使用法はプログラムの円滑なコンパイルを可能にするだけです。
  • 実行時に例外が発生した場合、throwsキーワードを使用した後でも、プログラムは異常終了します。
  • 実行時に例外が発生した場合は、プログラムを正常に終了させるためにtry / catchブロックを使用することをお勧めします。

注意:

キーワードthrowsはJavaでのみ使用されます。 C ++とC#はthrowsキーワードを使用しません。

スローとスローの主な違い

  1. キーワードthrowは、例外処理の責任を手動でJVMに引き渡すのに対し、キーワードthrowは、例外処理の責任を例外が発生したコードの呼び出し側のメソッドに引き継ぎます。
  2. throwキーワードの後に​​は、JVMに渡す例外オブジェクトが続きます。 一方、throwsキーワードの後に​​は、メソッド内で発生する可能性がある例外クラスが続きます。
  3. throwキーワードでは一度に1つの例外オブジェクトをスローできますが、throwsキーワードでは一度にカンマで区切って複数の例外クラスを宣言できます。

結論:

throwキーワードは、カスタマイズされた例外に最も適しています。 try / catchブロックは、throwsキーワードと比較して例外を処理するのに最適です。

Top