異常概要:異常な状況がランを発生します
異常な状態のカプセル化されたオブジェクトの形式で記述し、Javaクラスを使用しています。
呼ばれる説明異常なクラス、例外クラス。
異常なJavaはオブジェクト指向の例外クラスを記述することで、オブジェクトパッケージになった問題を通して考えています。
別の問題は、具体的には、添字境界、ヌルポインタとして異なるクラス、説明します。
2つのカテゴリに分類され、異常なシステム:
かどうか、エラー、または例外、問題は、投げる、発信者が知っているし、処理することができるはずのシステムの特徴は、ということでのThrowableとそのサブクラスはすべて使い捨ての性質を持っています。
Throwable:
①一般的に扱われていません。エラー
機能:JVMによってスローされた問題の深刻さは、これは一般的に、プログラムを修正し、直接処理するための問題ではありません。
②処理することができます。例外
使い捨て自然:スローやスローキーワードが運営するクラスとオブジェクトはの使い捨て持っているシステムの特性を:拡張サブクラスは強い読み、親クラス名の接尾辞として使用されています。
異常なカテゴリー:
異常を検出:のRuntimeException及びそのサブクラス以外即ち異常。コンパイル時にこのような異常の検出は、処理は通過できない、
非検出の異常:例外のRuntimeException及びそのサブクラス、すなわち搬送ランタイム。このような変化に対応していない例外はことも、あなたが直接コンソールに投げ込まスローされている場合は、発信者が修正することができます。
カスタム例外:
継承のいずれか の例外または継承 のRuntimeException
あなたが定義されていない例外をスローした場合は、Javaでカスタム例外クラスを作成する必要があります。
注意:異常なシステムを継承しなければならないカスタム例外クラスを操作スローがスローされ、スローすることができます
例外は注意をスローされます。
サブクラスは、親クラスをオーバーライドまたはサブクラスは、例外または親クラスのサブセットを投げることができます
①サブクラスは親クラスのメソッドは例外をスローした場合、方法サブクラスは、例外または例外親親サブクラスを投げることができ、親クラスのメソッドをオーバーライドする場合、
②複数の親クラスと、例外をスローし、その後、サブクラスは親クラスの異常のサブセットのみを投げることができます
注意:親クラスがスローされていない場合は、サブクラスが毛布を投げてはいけません、だけで試すことができます
例外処理:スローは、スローとキャッチ...してみてください。最後に、
プログラム例外がスローされた例外クラスまたは取得プロセスを発生し得る場合(例外クラスと称する)パッケージの例外記載されたタイプで、異なるクラスの異なる問題が発生しました。
例外がスローされます
投げる と 投げる の違いを:
①スロー:関数の中で、スロー例外オブジェクトがスローされます。スロー新しい新しい例外クラスを()
②スロー:機能に使用する、クラスは、例外がスローされたスロー、複数の(、)コンマで分離することができるスロー; 、...、...、クラス名をスロー
PS:新しいのRuntimeExceptionをスローすると、スローません
スロー:
プログラマによってプログラム例外のいくつかの論理エラーアクティブあるタイプが投げたとき、一般的に、コードの機能ブロック内に、例外をスロー
公共 のボイドgetOffer(文字列s){ 場合(s.equals( "ABC" )){ スロー 新しいNumberFormatExceptionがを(); } であれば(s.equals( "" )){ スロー 新しい例外( "输入参S不能为空" )。 } 他{ のSystem.out.println(S); } }
スロー:
(方法書で使用する場合の方法は、例外をスローする場合がありますことを示す、)文は、例外をスローすることがあります
この方法は、文のいくつかの種類の例外をスローされる場合が例外をスローする可能性がありますスロー、その後、上位層処理プログラムにそのメソッドを呼び出します
パブリック クラスtestThrows(){ 公共 静的 ボイド関数()スローNumberFormatExceptionが{ 文字列S = "ABC" ; のSystem.out.printlnを(Double.parseDouble(S)); } 公共の 静的な 無効メイン(文字列[]引数){ 試み{ 関数(); } キャッチ(NumberFormatExceptionがE){ (System.err.println "非データタイプがキャストすることはできません。" ); } }
異常なキャプチャ
例外をキャッチ:キャッチ...してみてください キーワードは例外キャッチ テイ...キャッチ例外の代わりに発生する可能性があります
トライ { // 異常コード(保護されたコードブロック)を検出する必要が } キャッチ(例外クラスの参照名)// クラスオブジェクトは異常が発生した受信 { // コードそのハンドル(例外クラス) } キャッチ(例外クラス参照名) { // 、複数のキャプチャすることができますは、try文の後にcatchブロックの任意の数を追加することができます。 / * 保護コードは、最初のcatchブロックの例外スローされた例外は、その後、ここで撮影し、一致した場合に例外が発生します。ない場合は、 すべての例外をcatchブロックでキャッチされているか、遠くまでは2番目のcatchブロックを通過し、かつます* / // 親子関係のtryブロック内に複数のcatch例外タイプは、サブクラスを配置する必要があります従って、各キャッチブロックは存在の意味を持つことを保証する親クラス例外の背面に正面、 } 最後に // 一般に(解放)オフに使用されるリソース { // 最後に見つかった捕捉の有無にかかわらず実行されなければならない動作をブロックコードは、両方が実行されますが、異常である //tryブロックは、そうでない場合は、少なくともfinallyブロックでなければならない、少なくとも一つのキャッチを持っている必要があります。しかし、最終的には例外の処理に使用されていない、最終的に例外をキャッチしません。 // 最終的には主に、データベース接続などの閉鎖など、いくつかのクリーンアップ作業を、行うには閉じられたストリームです。 }
キャッチしようと、最終的 な機能のブロックを組み合わせて :
① しようと キャッチ ついに ② トライ キャッチ、必要なリソースを解放する必要がないときは、あなたが最終的に定義することはできません(詳細) ③ しようと 最終的に 例外処理が直接キャッチすることはできませんが、リソースをクローズする必要があります
キャプチャ原則:
プログラムを書くとき、例外は一般的に、それをキャプチャし、それを処理しようと{...}キャッチ{...}を使用する部分に発生する可能性があります。
試してみると{...}キャッチ{...}キャッチ{...}、も、最も簡単な1つの出力文、またはスタック入力e.printStackTraceを(する例外処理の後に捕獲されなければなりません);
トライキャッチのときに対応する複数、親クラスであればcatchブロックは、以下に配置する必要があります。
出力は例外IO入力ストリームをキャッチする場合は、入力および出力ストリームは、最終的には{...}を加えた後のtry {...}キャッチ{...}閉じる必要があります。
機能投げの体が異常のいくつかの種類を投げた場合は、追加することが最良である関数名で声明をスロースローし、処理のために、その上側関数を呼び出します
例外処理の原則:
①内部関数は、例外がスローされたかどうかを検出する必要があり、その後、関数が宣言されなければなりません。それ以外の場合は、試してみる...キャッチキャプチャ機能内で使用される、または他のコンパイルに失敗しなければなりません。
(例外はRuntimeExceptionが以外に宣言する必要がスロー)
の呼び出しが異常な関数を宣言する場合は②、どちらかCTRYキャッチは投げまたはその他のコンパイルに失敗します。
③機能コンテンツがキャッチして解決することができ、呼び出し側によって解決発信者を、教えてスローで解決することはできません。
関数は、例外の数をスローする場合、標的治療のために呼び出すとき④は、複数のキャッチを持っている必要があります。数を投げ、いくつかをキャッチするために、いくつかの例外をスローするように、異常を検出するには、いくつかの内部の必要性があります。