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 つの方法で例外を処理できます。
- トライキャッチを使うことで
- を使用することで、 投げる キーワード
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: 使用例
Javathrows例外を処理するclass Geeks { public static void main ( String [] args ) throws InterruptedException { Thread . sleep ( 10000 ); System . out . println ( 'Hello Geeks' ); } }出力:
Hello Geeks説明: 上記のプログラムでは、 throws キーワードを使用して、 中断された例外 そして次のような出力が得られます こんにちは、ギークの皆さん。
例 3: で例外をスローする
Javathrowsclass 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 {} をスローします |