1.共通誤分類
一般的には、エラーは、次のカテゴリに分けることができます。
- ユーザーの入力エラー
- デバイスエラーや物理的な制限
- コードエラー
2.一般的なエラー処理
2.1エラーコード
エラー処理の1つの一般的に使用される方法は、異なる処理エラーコードに応じたメソッドを呼び出すことによって作られた、エラーコードが返されます。
しかし、いくつかの状況下では、エラーコードは、エラーコードとエラーコードと同じRMSとポイントを取得する方法として、使用に便利ではありません。
2.2例外処理
例外処理の使命は、エラーが状況に対処することができ、エラーハンドラに発生した場所からコントロールを転送することです。
プログラム制御に場所から場所へジャンプエラーを処理するエラーを引き起こしたか、エラーが発生すると、プログラムが安全な状態に復元する必要があると最初からやり直し、または現在のジョブのセキュリティー出口を保存するが、これは容易ではない、キーがあります。
通常の方法でそのタスクを完了することができない場合、Javaはすべての方法に代替出口経路を可能にします:
- 首先、エラー情報をカプセル化するオブジェクトをスロー
- 然后、例外処理メカニズムは、この特定のエラー状態に対処することができる例外ハンドラの検索を開始します
- この代替出口経路ロジックはすぐに、メソッドが終了を通常の手順とは何の関係もありませんし、それはその正常値を返さないと、実行はメソッドと呼ばれることをコードで再開されませんのでご注意
3. Javaの例外の階層
3.1のThrowable
それはに細分化された基底クラスのThrowable全体のJava例外階層、次のとおりです。
- エラー
- 例外
3.2エラー
エラーの階層は、Javaランタイムシステム内の内部エラーや資源枯渇の状況を説明しています。
あなたは、このタイプのオブジェクトを投げるべきではありません。sucn内部エラーがユーザに通知し、正常プログラムを終了しようとしているを超えて、発生した場合にあなたができることはほとんどあり。
3.3例外
例外は、2つのカテゴリに分けることができます。
- RuntimeException
- 他の
RuntimeExceptionは、次のようなコーディングエラー、意味
悪いキャスト、外の -bounds配列アクセス、NULLポインタへのアクセスなどを。
他の例外は通常、予期しない事態である、いくつかの悪い事は、例えば、存在しないファイルを開くことが起こりました。
なぜRuntimeExceptionが存在しないファイルを開けませんか?これはあなたのコードを制御することができないのであなたがチェック可能性がある場合、ファイルが存在するかどうか最初のチェックは、役に立たないですがありますが、開いたときに存在しません。
チェックされない例外対4.チェック例外
エラーとはRuntimeExceptionこれら二つは、私たちはチェックされない例外と呼ばれます。
これら二つの離れた他の例外エラーとはRuntimeExceptionに加えて、我々は、チェック例外と呼ばれます。
あなたはすべてのチェック例外のための例外ハンドラを提供することをコンパイラをチェックします。
- エラーの場合は、あなたが何もしない、それがチェックされない例外です
- RuntimeExceptionの場合、エラーはあなたの責任であるコーディング、あなたは彼らが表示されないようにする必要があり、それはまた、チェックされない例外です
- その他の例外のために、あなたはそれが例外をチェックされ、それらに対処するために準備する必要があります
5.チェック例外宣言
チェック例外は、あなたの方法をスローされる可能性があるためには、メソッドの宣言によってスロー宣言する必要があります。
、より多くのチェック例外を投げることができた場合は、カンマで区切って列挙されている必要があります。
public Image loadImage(String name) throws FileNotFoundException, EOFException {...}
チェックされない例外がスローされます、あなたの文に表示されてはならない、ということ注:
- エラーのために、あなたは何もできません
- 彼らが表示されるのRuntimeExceptionのために、次の文がそれらを投げる可能性があるのではなく、避けるべきです。
例外をスロー6.
どのように例外をスローするには?それは簡単です:
- 適切な例外クラスを見つけます
- そのクラスのオブジェクトを作ります
- 投げて
利用できませ適した標準の例外クラスか?問題ではない、あなたがカスタマイズすることができます
class FileFormatException extends IOException {
public FileFormatException() {}
public FileFormatException(String gripe) {
super(gripe);
}
}
デフォルトコンストラクタと詳細メッセージを持つコンストラクタ:一般的に、我々は独自の例外クラスのための2つのコンストラクタを提供しています。
7.キャッチ例外
try {
xxx
} catch (ExceptionType1 | ExceptionType 2 e) {
xxx
} catch (ExceptionType3 e) {
xxx
}
あなたがそれらを処理する方法を知っていればチェック例外については、その後、あなたがそれらをキャッチすることができますので、それらをスローしません。
一般的なルールとして、あなたはあなたが処理する方法がわからないものを処理して伝播する方法を知っているこれらの例外をキャッチする必要があります。
8.再スロー例外
try {
xxx
} catch (SQLException e) {
throw new ServletException("xxx error").initCause(e);
}
これは、再スロー例外の一般的な方法です。このように、我々はより抽象的な例外をラップすることができ、またはのRuntimeExceptionにチェック例外を変換します。
9.最後に
try {
try {
xxx
} finally {
xxx
}
} catch (Exception e) {
xxx
}
必ずリソースが解放されていることを確認するには:インナーtryブロックは、単一の責任を負っています
エラーが報告されていることを確認するには:外側のtryブロックは、単一の責任を負っています。
注意、finally節の本体は、リソースをクリーンアップするためのものです。finally節内(、リターン、スロー、ブレーク継続)制御の流れを変更する文を入れないでください。
10のtry-と、リソース
try (Resource res = xxx) {
xxx
}
Javaの7からは、トライ最終的な構造は、try-と、リソースのように簡略化することができます。
tryブロックの終了は、その後、res.closeとき、リソース要件が自動的に呼び出されます()、AutoCloseable実装クラスでなければなりません。
tryブロックが例外をスローし、closeメソッドは例外をスローしたときに困難が生じます。元の例外を再スローされ、closeメソッドによってスローされるすべての例外は、「抑制」と考えられています。彼らは自動的にキャッチされ、addSuppressed方法で元の例外に追加されます。