Javaは使用状況をキャッチします<br /> Javaランタイムシステムによって提供されるデフォルトの例外ハンドラーはデバッグに役立ちますが、通常は自分で例外を処理する必要があります。これを行うことには2つの利点があります。まず、エラーを修正できます。第二に、プログラムが自動的に終了するのを防ぎます。ほとんどのユーザーは、プログラムが終了するときとエラーが発生するたびにスタックトラックを印刷することについて(控えめに言っても)動揺しています。幸いなことに、これは簡単に回避できます。
ランタイムエラーを防止および処理するには、トライブロックに監視するコードを配置するだけです。キャッチするエラーのタイプを指定するキャッチ句を含む、トライブロックに続いて。このタスクを完了するのは非常に簡単です。次のプログラムには、ゼロで除算することで生成された算術型例外を処理するキャッチ句が含まれています。
クラスexc2 {string args []){//コードのブロックを監視します印刷。 ");} catch(arithmeticexception e){// dividate-zeroエラーSystem.out.println(" dision by zero。 ");} system.out.println("後のc atchステートメント。 ") ;プログラムは次のように出力します:
ゼロによる分割後、キャッチステートメント。
tryブロックでprintln()への呼び出しは実行されないことに注意してください。例外が発生すると、プログラム制御はTryブロックからCatchブロックに転送されます。実行は、キャッチブロックからトライブロックに「戻る」ことはありません。したがって、「これは印刷されません。」
表示されません。 Catchステートメントが実行されると、プログラム制御は、Try/Catchメカニズム全体の次の行から続きます。
試してみると、そのキャッチステートメントはユニットを形成します。 Catch句の範囲は、TRYステートメントの前に定義されたステートメントに限定されます。キャッチステートメントは、別のTRYステートメントによって提起された例外をキャッチすることはできません(ネストされたTRYステートメントケースでない限り)。
Tryによって保護されたステートメントは、ブレース内にある必要があります(つまり、ブロック内にある必要があります)。一人で試してみることはできません。
Catch句を作成する目的は、例外を解決し、エラーが発生しないかのように実行し続けることです。たとえば、次のプログラムでは、各ループを繰り返して、2つのランダム整数を取得します。これらの2つの整数は、それぞれ相手で分割され、結果は12345を分割するために使用されます。最終結果はaに存在します。分割操作がゼロ分割エラーをもたらすと、キャプチャされ、Aの値がゼロに設定され、プログラムは実行され続けます。
//例外を処理して、Import java.util.random; class handleerror {public static void main(string args []){int a = 0、b = 0、c = 0; )(int i = 0; i ++){b = r.nextint(); {system.out.println( "zero。");例外の説明を表示します
スロー可能なオーバーロードは、toString()メソッド(オブジェクトで定義されています)であるため、例外説明を含む文字列を返します。 println()の例外にパラメーターを渡すことにより、例外の説明を表示できます。たとえば、前のプログラムのキャッチブロックは、
catch(arithmeticexception e){system.out.println( "exception:" + e);このバージョンが元のプログラムでバージョンを置き換えると、プログラムは標準のJavajdkインタープリターの下で実行され、各エラーは次のメッセージを表示します。
例外:java.lang.arithmeticexception: / by zero
コンテキストには特別な値はありませんが、例外の説明を表示する機能は、特に例外を実験してデバッグする場合です。
Java複数のCACTステートメントの使用<BR />場合によっては、複数の例外が単一のコードセグメントによって引き起こされる場合があります。この状況を処理するために、2つ以上のキャッチ条項を定義できます。それぞれが1つのタイプの例外をキャッチします。例外が発生すると、各CACT条項が順番にチェックされ、例外タイプに一致する最初の句が実行されます。 Catchステートメントが実行されると、他の条項がバイパスされ、Try/Catchブロックの後に実行がコードから継続されます。次の例では、2つの異なる例外タイプを設計します。
//複数のキャッチステートメントを示します。ClassMultiCatch{public static void main(] {int a = args.out.println( "a =" + a); ; int c = {1}; out .println( "Array Index OOB:" + e);プログラムは、コマンドラインパラメーターなしで開始条件で実行され、Aは0であるため、ゼロ分割された例外が得られます。コマンドラインパラメーターを提供すると、ゼロを超える値に設定します。ただし、整数配列Cの長さは1で、プログラムの値をCに割り当てようとするため、ArrayIndexOutof BoundSexception例外が発生します。
2つの異なる状況で実行されるプログラムの出力は次のとおりです。
C:/> Java MultiCatcha = 0Divide by 0:java.lang.arithmeticexception:/by zero try/catch blocks.c:/> java multicatch testarga = 1array index oob:j ava.lang.arrayindexofboundsexcection after try/catch blocks。
マルチキャッチステートメントを使用する場合、親クラスのいずれか前に例外サブクラスを使用する必要があることを覚えておくことが重要です。これは、親クラスのCatchステートメントを使用すると、タイプとそのすべてのサブクラス型の例外がキャッチされるためです。このように、サブクラスが親クラスの背後にある場合、サブクラスは決して到着しません。さらに、Javaで到達できないコードはエラーです。たとえば、次の手順を検討してください。
/*このプログラムにはエラーが含まれています。サブクラスは、一連のキャッチステートメントでスーパークラスの前に来る必要があります。 args []){int a = 0; rithmeticexceptionは、例外のサブクラスです。プログラムをコンパイルしようとすると、例外がキャッチされたために2番目のCatchステートメントが到着しないというエラーメッセージが表示されます。 arithmeticexceptionは例外のサブクラスであるため、最初のキャッチステートメントは、arithmeticexceptionを含むすべての例外指向のエラーを処理します。これは、2番目のCatchステートメントが実行されないことを意味します。プログラムを変更するには、2つのキャッチステートメントの順序を逆にします。