Java Uncaughtの例外<BR />プログラムで例外を処理することを学ぶ前に、それらを処理しないとどうなるかを確認することが有益です。次のアプレットには、意図的にゼロ偏差エラーを引き起こす式が含まれています。
クラスExc0 {public static void main(] {int d = 0;
Javaランタイムシステムがゼロで除算される状況をチェックすると、新しい例外オブジェクトを構築し、例外をスローします。これにより、EXC0の実行が停止します。例外がスローされると、例外ハンドラーにキャッチされ、すぐに処理される必要があるためです。この例では、独自の例外ハンドラーを提供していないため、例外はJavaランタイムシステムのデフォルトハンドラーによってキャッチされます。プログラムによってキャッチされていない例外は、最終的にデフォルトのハンドラーによって処理されます。デフォルトのハンドラーは、例外を説明する文字列を表示し、例外が発生する場所でスタックトレースを印刷し、プログラムを終了します。
標準のJavajdkランタイムインタープリターによって生成された出力は、プログラムを実行します。
java.lang.arithmeticexception: / exc0.mainでゼロ(exc0.java:4)
クラス名exc0、メソッド名メイン、ファイル名Exc0.java、ライン番号4が単純なスタック使用トラックに含まれる方法に注意してください。また、スローされた例外タイプは、arithmeticexceptionと呼ばれる例外のサブクラスであり、これがどのタイプのエラー方法をより明確に説明していることに注意してください。この章の後半では、Javaは、生成される可能性のあるさまざまなタイプのランタイムエラーに一致する複数の組み込みの例外タイプを提供します。
スタックトラックには、エラーが発生するメソッド呼び出しのシーケンスが表示されます。たとえば、同じエラーを導入する前のプログラムの別のバージョンですが、エラーはmain()メソッド以外の別の方法で生成されます。
クラスExc1 {static subroutine(){int d = 0;
デフォルトの例外ハンドラーのスタックトラックの結果は、コールスタック全体の表示方法を示しています。
java.lang.arithmeticexception: / exc1.subroutine(exc1.java:4)atec1.main(exc1.java:7)でゼロによる
ご覧のとおり、スタックの下部はメインの行7であり、サブルーチン()メソッドを呼び出します。この方法は、4行目に例外を引き起こします。コールスタックは、エラーにつながる正確な手順を特定するため、デバッグに重要です。
Javaのネスティングはステートメントを試します
ステートメントをネストすることができます。つまり、トライステートメントは別のトライブロック内にあることができます。 Tryステートメントを入力するたびに、例外は関係がスタックに押し込まれます。内部TRYステートメントに特別な例外を除いてキャッチハンドラーが含まれていない場合、スタックがポップアップし、次のTRYステートメントのキャッチハンドラーがそれが一致するかどうかを確認します。このプロセスは、キャッチステートメントが正常に一致するか、すべてのネストされた試行ステートメントが使い果たされるまで続きます。 Catchステートメントが一致しない場合、Javaランタイムシステムはこの例外を処理します。ネストされたトライステートメントを使用する例は次のとおりです。
//ネストされたtryステートメントの例Class nestry {public static void main(string args []){int a = args.lengths;分割 - ゼロの例外。 divide-zero例外は、次のコードによって生成されます。 out-of-bounds例外e){system.out.println( "アレイインデックス外:" + e)
ご覧のとおり、プログラムは1つのトライブロックに別のトライブロックをネストします。プログラムは次のように機能します。コマンドラインパラメーターなしでプログラムを実行すると、外側のトライブロックはゼロで除算された例外を生成します。プログラムはコマンドラインパラメーター条件の下で実行され、ネストされたトライブロックで割ったエラーにより、分割可能なエラーが発生します。内側のブロックはこの例外と一致しないため、例外が処理される外側のトライブロックに例外を渡します。 2つのコマンドラインパラメーターを使用してプログラムを実行すると、内部TRYブロックによって配列境界例外が生成されます。次の結果は、各ケースを示しています。
c:/> java nesttrydivide by 0:java.lang.arithmeticexception:/by zeroc:/> java nestry onea = 1divide by 0:java.lang.arithmeticexception:/by zeroc:/> java nestry one 2a = 2aray index out- of-bounds:java.lang.arrayindexOutofboundsexception
メソッドコールがある場合、Tryステートメントのネストは非常にひそかに発生する可能性があります。たとえば、トライブロックでメソッドに通話を配置できます。この方法には、別のTRYステートメントがあります。この場合、メソッド内のTRYは、メソッドを外部的に呼び出すTRYブロックにまだネストされています。以下は、前の例の変更であり、ネストされたトライブロックはnestry()のメソッド内部に移動されます。
/*トライステートメントは、メソッドへの呼び出しを介して暗黙的にネストできます。 - ゼロ例外は、次のコードによって生成されます。 f-Bounds Exception。 .out .println( "Array Index ofbounds:" + e);以下のステートメントは、ゼロの分割を生成します){system。
このプログラムの出力は、前の例と同じです。