[Java] Chapter 18. 例外処理
📌18-1. JAva異常処理の基礎
プログラムにアクセスできる人にはプログラマーとユーザーがいます.
プログラマは使用中にエラーが発生する可能性があり、ユーザーが使用中に不適切な使用によってエラーが発生する可能性があります.
現在処理される例外は、通常、ユーザーの不適切な使用によるエラーです.
また、プログラマは、プログラマが望まない場合でもプログラムを実行できるという、珍しい場合にプログラミングを行わなければならない.これが例外処理である.
例外を通知するために存在するクラスがあります.
java.lang.ArithmeticException
:数学演算でエラーが発生したことを示す異常類java.util.InputMismatchException
:Scannerクラスの異常クラスやってみる~catch moon
他の例外処理方法がない場合はif~else文で処理できますが、コード全体を表示する際にプロセスを一目で理解するのは難しいです.
したがって,try~catch文である異常処理文を個別に区別することが望ましい.
try {
// 관찰 영역
}
catch {
// 처리 영역
}
1つのcatch文では領域全体の異常を管理できないため、catch文が担当する領域をtry文で囲む.異常処理の流れを見てみましょう.
また,JVMがtry文に入る速度が遅くなるため,try文で多くのコードを包むのは効率的ではない.
したがって、try文で囲む領域を決定する必要があります.
「ここで例外が発生した場合、残りのことは無効でスキップする必要があります」とタスクと見なし、try文でバンドルします.
1つのtry文に2つ以上の例外が発生する可能性があります.
// 방법 1
try {
...
}
catch(ArithmeticException e) {
...
}
catch(InputMismatchException e) {
...
}
// 방법 2
try {
...
}
catch(ArithmeticException | InputMismatchException e) {
...
}
変換可能クラス
java.lang.Trowable
クラスは、すべての例外クラスのトップクラスです.もちろん、このクラスはObjectクラスも継承します.Trowableクラスには2つの典型的な方法があります.
public String getMessage()
:異常原因を含む文字列を返すpublic void printStackTrace()
:異常位置と呼び出し方法の情報が出力され、また理由が返されるため、通常はどちらかしか使用できません.例外発生ポイントで例外が処理されていない場合は、そのメソッドを呼び出す領域に例外が渡されます.
以上のコードで異常が発生する可能性がある箇所は
md2
メソッドです.しかしtry~catch文が存在しないため、異常を処理できない.したがって、
md1
methodで異常を処理する必要があるが、try~catch文main
methodがないため、責任を移す.しかし
main
Methodも例外を処理できないため、責任をJVMに転嫁する.JVMは、例外クラスインスタンスの
printStackTrace()
を呼び出して終了します.以外の異常類
ArrayIndexOutOfBoundException
ClassCastException
NullPointerException
📌18-2. 処理異常の残りの説明。
異常クラスの区切り
複数の例外クラスを次の3つに分類できます.
:RuntimeExceptionクラスはExceptionクラスを継承します.
RuntimeExceptionクラスを継承する例外は、通常、コードエラーによって発生します.したがって,このタイプの異常の場合,コードの修正を考慮すべきである.
┑Exceptionクラス
私たちが本当に例外と言える状況はExceptionクラスと定義されています.したがって,例外の扱い方を明確にしなければならない.コンパイルエラーが発生します.
この場合の例外処理には2つの方法がある.
throws
プログラマ定義の例外クラス
構文異常ではなく論理異常を考慮して、プログラマは例外クラスを作成することもできます.
class AAA extends Exception {...}
Exceptionクラスの継承は例外クラスの唯一の条件です.age
の値は0より小さく、クエリthrow
に遭遇すると、JVMは例外処理メカニズムを実行します.また、JVMではなく例外クラスのインスタンスを作成する必要があります.throws
とthrow
を区別する必要があります.Exceptionクラスを間接的に継承することも例外クラスとなります.
次の例外クラスを作成することを考えてみましょう.
class FirstException extends Exception {...}
class SecondException extends FirstException {...}
class ThirdException extends SecondException {...}
継承された概念によって、FirstException
は例外クラスとして作成された参照変数として3つの例外クラスを参照することができる.try {...}
catch(FirstException e) {...}
catch(SecondException e) {...}
catch(ThirdException e) {...}
ただし、このようにcatch文を構築すると、最初のcatch文はすべての例外の影響を受けるため、残りの2つのcatch文は機会を得ることができません.幸いなことに、コンパイラはこの部分にコンパイルエラーを提供しました.
この問題を解決するにはcatch文の順序を変更する必要がある.
try {...}
catch(ThirdException e) {...}
catch(SecondException e) {...}
catch(FirstException e) {...}
✅finally
コードの実行がtry文に入ると、finally文が無条件に実行されます.
// 작성법 1
try {...}
finally {...}
// 작성법 2
try {...}
catch(...) {...}
finally {...}
たとえば、ファイルの入出力では、ファイルが開くと閉じる必要があります.したがって、finally文にファイルを閉じるコードが含まれていると仮定します.しかし,クローズ中に例外が発生するためtry~catch文が出現する.これでコードが複雑になり、面白くなくなります.
この問題を解決するために現れたのはtry-with-resourcesです.
ファイルを含むリソースにはopen-closeの概念があるため,リソースを制御するためのコードとtryの組合せが作成される.
writer
参照インスタンスが自動再利用可能なインタフェースを実装している場合、try-with-resourcesを使用することができます.🔗カリキュラムとリソースソース
Naver Cafe|尹聖祐のプログラミング学習グループ
Reference
この問題について([Java] Chapter 18. 例外処理), 我々は、より多くの情報をここで見つけました
https://velog.io/@nandgate110/java-chapter-18
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([Java] Chapter 18. 例外処理), 我々は、より多くの情報をここで見つけました https://velog.io/@nandgate110/java-chapter-18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol