Javaリサーチの公開(jdeep)-exception
checked , unchecked exception
エラー(システムに異常が発生)
ソース:https://madplay.github.io/post/java-checked-unchecked-exceptions
checked Exception
主に外部の影響によるものであり,プログラム利用者の動作によって生じることが多い.
コンパイル時に表示できる例外
(FileNotFoundException、ClassNotFoundException、DataFormatExceptionなど)
コンパイル時に確認するには、直ちに異常処理を行う必要があります.
Unchecked Exception
通常は、予知不可能およびリカバリ不可能な例外です.主に外部APIの使用,プログラミングエラーなどを示す.
(ArrayIndexOutOfBoundsException, NullPointerException,ClassCastException, ArithmeticException)
=タイル範囲外でnullの参照変数を呼び出し、実数を変換し、整数を0で割る
2つの明確な基準は、処理しなければならないか、処理しないかの違いです.
Checked Exceptionが発生する可能性のあるメソッドはtry~catchで包むか、throwで処理する必要があります.
逆に、Unchecked Exceptionでは明示的な例外処理は不要です.
Javaでchecked、unchecked exceptionを分割する理由
https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html
メソッドを呼び出す側は、メソッドにどのような例外が発生する可能性があるかを理解する必要があります.
したがって、javaはchecked exceptionによって、このメソッドに発生する可能性のある異常を強制的にリストします.
RuntimeExceptionでは異常の原因を説明する必要はありません
コードを記述する開発者のミスによる例外はRuntimeExceptionであるため,クライアント側(メソッド呼び出し)がリカバリしたり対応したりできるとは予想し難い.また,RuntimeExceptionはどこでも非常に頻繁であるため,すべてのRuntimeExceptionにメソッドで宣言を強制することはプログラムの明確性を低下させる可能性がある.
クライアントが例外をリカバリできると予想している場合は、checked exceptionに設定したほうがいいです.そうしないと、unchecked exceptionに設定します.
いじょうでんぱ
メソッドエラー
メソッドは、エラー情報、タイプ、およびポイントを含むオブジェクトを作成し、ランタイムシステムに渡します.そしてこれを例外と形容します.
メソッドが異常を投げ出すと、ランタイムシステムは異常を処理するものを探してみます.
画像ソース:https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html
Call stack=例外が発生したメソッドのリストを呼び出す
エラーが発生したメソッドを達成するためにcallスタックを使用して到着します.
画像ソース:https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html
ランタイムシステムは、エラーメソッドから呼び出された逆シーケンスcallstackに従って、異常を処理できるコードを決定します.
適切な例外処理ハンドルが見つかった場合、実行時にシステムは例外をハンドルに渡します.
Exceptionを扱うHandlerが見つかるまで上流に転送されます.
最後のプライマリ・エラーから最後のプライマリ・エラーに移行したら?スタックトラッキングを表示し、スレッドを閉じます.
Custom例外はいつ使えばいいですか?例外コストの良い文章
https://tecoble.techcourse.co.kr/post/2020-08-17-custom-exception
スプリングポリシーから見た例外リカバリ
JDBCを使用する場合の例外処理文.
SQL異常の原因を1つずつチェックしています.
これらの問題に加えて、各データベースには異なる例外ステータスコードがあるため、データベースが変更された場合はステータスコードを変更する必要があります.
try {
//do data operation using JDBC
} catch (SQLException ex) {
boolean recovered = false;
String sqlstate = sqlex.getSQLState();
if (sqlstate != null) {
String classCode = sqlstate.substring(0, 2) ;
if ("23".equals(classCode) ||"27".equals(classCode) ||
"44".equals(classCode)) {
// Apply recovery strategy
recovered = true;
}
}
if (!recovered)
throw new ApplicationSpecificExceptionf("Other SQL exception", ex);
}
Springは、データ整合性ViolationException(データバインドエラー)という例外を提供します.これはJDBCのSQLExceptionよりも明確です.
意味が明確になるだけのメリットではありません.
try {
//do data operation using JDBC abstraction layer
} catch (DatalntegrityViolationException ex) {
// Apply recovery strategy
}
もう一つの利点は明確なエラーが渡された以上、catch文に「できれば修復を試みる」ポリシーを記述できます.
リカバリポリシーにcatchロジックを記述できます.
try-with-resources
try-catch-finally
DataInputStream dis = null;
FileInputStream fis = null;
try {
fis = new FileInputStream("123.txt");
dis = new DataInputStream(fis);
...
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis!=null)
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try-with-resources try(FileInputStream fis = new FileInputStream("123.txt");
DataInputStream dis = new DataInputStream(fis)) {
...
} catch (IOException e) {
e.printStackTrace();
}
Reference
この問題について(Javaリサーチの公開(jdeep)-exception), 我々は、より多くの情報をここで見つけました https://velog.io/@dudwls0505/자바발표テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol