2019年11月2日第一に、異常:動作中のソフトウェアプログラムは、(例外)が表示されますいくつかの例外かもしれません。
2.javaは、例外、プロセスを処理するためにオブジェクト指向の方法の使用です。
例外をスロー:例外が発生した場合メソッドの実装では、この方法は、異常を表すオブジェクトを生成し、現在の実行経路を停止し、JREに提出された例外オブジェクト。
キャプチャ例外:例外はJRE後に得られる、例外を処理するための適切なコードを見つけます。JREは、この方法は、あなたがこれまでに適切な例外処理コードを見つけるまで、バック例外を生成から始まる、コールスタックのメソッドを見てください。
処理:試す{...}キャッチ{...}最後に{...}
エラーは例外オブジェクトは、スロー以下のキャッチキャプチャ、例外処理を実行されて発生した場合、間違ったコードが発生する可能性が置かれてみてください。最後にかかわらず、例外は常に実行され、最終的に発生があるかどうかの、コードの「リハビリ」を置きます。何の適切な例外をハンドリング機構いない場合は、JVMは、アプリケーション全体を終了します。
第二に、異常なカテゴリー:
JDKは、多くの例外クラスを定義し、これらのクラスは、起こり得る異常事象の広範囲に対応し、すべての例外オブジェクトは、Throwableの派生クラスのインスタンスです。また、あなたはまた、独自の例外クラスを作成することができます。(問題を捕捉することができることを生じる)(典型的にはJVMプロセスによってシステムエラー)エラーと例外:すべての異常な根たjava.lang.Throwableは、Throwableのは、以下の2つのサブクラスを導出します。キャッチするか、再度スロー宣言する必要があります例外例外クラスから直接派生し;(2)実行時例外:(1)チェック例外:それがキャッチすることができます例外は、2つのカテゴリに分けることができるのRuntimeExceptionの例外クラスから派生します。いつでも、この例外オブジェクトを投げることができるthrow文を使用します。
第三に、多層例外がキャッチ
パッケージorg.yuan.Day3; パブリック クラスCatchWho { 公共の 静的な 無効メイン(文字列[] args)を{ しようと{ しようと{ スロー 新)(ArrayIndexOutOfBoundsExceptionがします。 } キャッチ(ArrayIndexOutOfBoundsExceptionが電子){ System.out.println( "は、ArrayIndexOutOfBoundsException" + "/内层のtry-catchを" ); } スロー 新しいはArithmeticExceptionを(); } キャッチ(はArithmeticException電子){ System.out.println( "はArithmeticExceptionを発生しました" ); } キャッチ(ArrayIndexOutOfBoundsExceptionが電子){ System.out.println( "は、ArrayIndexOutOfBoundsException" + "/外层のtry-catchを" ); } } }
結果:
パッケージorg.yuan.Day3; パブリック クラスCatchWho2 { 公共の 静的な 無効メイン(文字列[] args)を{ しようと{ しようと{ スロー 新)(ArrayIndexOutOfBoundsExceptionがします。 } キャッチ(はArithmeticException電子){ System.out.println( "は、ArrayIndexOutOfBoundsException" + "/内层のtry-catchを" ); } スロー 新しいはArithmeticExceptionを(); } キャッチ(はArithmeticException電子){ System.out.println( "はArithmeticExceptionを発生しました" ); } キャッチ(ArrayIndexOutOfBoundsExceptionが電子){ System.out.println( "は、ArrayIndexOutOfBoundsException" + "/外层のtry-catchを" ); } } }
結果:
唯一の例外は別の例外をスローするために捕獲された後、スロー
パッケージorg.yuan.Day3; パブリック クラスEmbededFinally { 公共 静的 ボイドメイン(文字列引数[]){ int型の結果。 してみてください{ System.out.println( "レベル1で" ); してみてください{ System.out.println( "レベル2で" ); // 結果= 100/0。 // レベル2 してみてください{ System.out.println( "レベル3で" ); 結果 = 100/0。 // レベル3 } キャッチ(例外e){ System.out.println( "レベル3:" + 。e.getClass()のtoString()); } 最終的には{ System.out.println( "レベル3ではついに" ); } // 結果= 100/0。 // レベル2 } キャッチ(例外e){ System.out.println( "レベル2:" + 。e.getClass()のtoString()); } 最終的には{ System.out.println( "レベル2ではついに" ); } // 結果= 100/0。 // レベル1 } キャッチ(例外e){ System.out.println( "レベル1:" + 。e.getClass()のtoString()); } 最終的には{ System.out.println( "レベル1ではついに" ); } } }
結果:
最後にネストするとき、異なる位置にスローされた例外をスロー異なるレベルで、最終的に、ブロックの実行の別の順序で生じ得ます。