Java異常By荼荼荼小
2744 ワード
本文はLink--Java異常について簡単に述べる
Java例外とは、現在のメソッドまたは役割ドメインの継続的な実行を阻止する問題です.
Javaの例外体系:ThrowableはJava言語のすべてのエラーまたは異常のスーパークラス(すべての投げられるものを含む)である.彼には2つのサブクラスがあります.ErrorとExceptionです.
Error:適切なプログラムがキャプチャしようとしないことを示す深刻な問題.例えばVirtualMachineErrorは、JVMがクラッシュしたり、操作を継続するために必要なリソースを使い果たしたりしたときに、このエラーを投げ出します.
Exception:2つのクラスに分類されます.
Runtime Exception(Checked Exceptionとも呼ばれる)
Unchecked Exception(Runtime Exception以外)
例外処理方法:
処理方法1:異常をtry...catchにキャプチャ
処理方法2:異常を外へ放出し続ける
異常な使用
Case 1:
Case 2:異常を投げ直す
そのままこの異常を一級上に投げつけて、この方法を呼び出した人に投げつけて、頭を悩ませましょう.
Case 3:異常チェーンの使用及び紛失
異常チェーンの紛失を避けるために、異常を投げ出す前にinitCause()を呼び出して異常の原因を初期化し、e.printStackTrace()を呼び出すと、前のレイヤの異常も印刷されます.
例えば、e.initCause(a);
Case 4:清掃作業
IO、JDBCなどのリソースを消費する操作が、使い終わった後にタイムリーに正しく閉じられていない場合は、メモリの漏洩を意味する深刻な結果になります.
Case 5:異常な誤用
ある人は直接1つのExceptionですべての異常を捕まえるのが好きで、これは実は最も愚かで最も2つの方法で、何が引き起こした異常なのか全然分かりません.
異常時にプログラムが意外な状況を処理するメカニズムは、プログラムが意外な場合、発生した位置、説明、原因など、できるだけ多くの意外な情報を得る必要があります.これらはすべて私たちが問題を解決する手がかりです.もし私たちが自分でコードを書くならば、できるだけ多くのこの異常について説明しなければなりません.例えば、なぜこの異常が発生したのか、どのような状況でこの異常が発生したのか.入力メソッドのパラメータが正しくない場合は、どのパラメータが合法的なパラメータであるかを通知するか、Sampleを与えます.
もう一つ、try blockを短く書くべきで、すべてのものをここに捨てないでください.可能な限り、どのコードが異常になる可能性があるかを分析し、異常が発生する可能性があるコードだけをcatchします.異常ごとにtry...catchをできるだけ書き、異常の紛失を避ける.1つのtryの後ろの複数のcatchでは、最大1つのcatchブロックしか実行されないためです.
Case 6:tryブロックにreturn文がある場合、finallyブロックの文が最初に実行され、メソッドが返されます.
tryブロックにSystem.exit(0)文がある場合、finallyブロックのコードは実行されません.System.exit(0)は現在実行されているJVMを終了し、JVMが終了する前にプログラムが実行を終了します.
Java例外とは、現在のメソッドまたは役割ドメインの継続的な実行を阻止する問題です.
Javaの例外体系:ThrowableはJava言語のすべてのエラーまたは異常のスーパークラス(すべての投げられるものを含む)である.彼には2つのサブクラスがあります.ErrorとExceptionです.
Error:適切なプログラムがキャプチャしようとしないことを示す深刻な問題.例えばVirtualMachineErrorは、JVMがクラッシュしたり、操作を継続するために必要なリソースを使い果たしたりしたときに、このエラーを投げ出します.
Exception:2つのクラスに分類されます.
Runtime Exception(Checked Exceptionとも呼ばれる)
Unchecked Exception(Runtime Exception以外)
例外処理方法:
処理方法1:異常をtry...catchにキャプチャ
処理方法2:異常を外へ放出し続ける
異常な使用
Case 1:
try
{
//
// ,
}
catch (Exception e)
{
//
}
finally
{
// ,finally
}
Case 2:異常を投げ直す
そのままこの異常を一級上に投げつけて、この方法を呼び出した人に投げつけて、頭を悩ませましょう.
Case 3:異常チェーンの使用及び紛失
異常チェーンの紛失を避けるために、異常を投げ出す前にinitCause()を呼び出して異常の原因を初期化し、e.printStackTrace()を呼び出すと、前のレイヤの異常も印刷されます.
例えば、e.initCause(a);
Case 4:清掃作業
IO、JDBCなどのリソースを消費する操作が、使い終わった後にタイムリーに正しく閉じられていない場合は、メモリの漏洩を意味する深刻な結果になります.
public void readFile() {
BufferedReader reader = null;
try {
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream("file")));
// do some other work
// close reader
} finally {
reader.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Case 5:異常な誤用
ある人は直接1つのExceptionですべての異常を捕まえるのが好きで、これは実は最も愚かで最も2つの方法で、何が引き起こした異常なのか全然分かりません.
異常時にプログラムが意外な状況を処理するメカニズムは、プログラムが意外な場合、発生した位置、説明、原因など、できるだけ多くの意外な情報を得る必要があります.これらはすべて私たちが問題を解決する手がかりです.もし私たちが自分でコードを書くならば、できるだけ多くのこの異常について説明しなければなりません.例えば、なぜこの異常が発生したのか、どのような状況でこの異常が発生したのか.入力メソッドのパラメータが正しくない場合は、どのパラメータが合法的なパラメータであるかを通知するか、Sampleを与えます.
もう一つ、try blockを短く書くべきで、すべてのものをここに捨てないでください.可能な限り、どのコードが異常になる可能性があるかを分析し、異常が発生する可能性があるコードだけをcatchします.異常ごとにtry...catchをできるだけ書き、異常の紛失を避ける.1つのtryの後ろの複数のcatchでは、最大1つのcatchブロックしか実行されないためです.
Case 6:tryブロックにreturn文がある場合、finallyブロックの文が最初に実行され、メソッドが返されます.
tryブロックにSystem.exit(0)文がある場合、finallyブロックのコードは実行されません.System.exit(0)は現在実行されているJVMを終了し、JVMが終了する前にプログラムが実行を終了します.