Effective Java 9 | Exception


Exception


本文は2021年12月23日に書かれた.

アイテム69|使用例外


原木|例外は真の例外の場合のみ使用
例外は例外の場合にのみ使用できます.
日常的な制御フローには絶対に使用できません.
では、どんな間違いにもどう対処すればいいのでしょうか.
以下の3つの方法がある.
  • 状態検査方法|Ivaratorのnext、hasNext等
  • 特殊値
  • null、例えば
  • Optional
  • 物品70|検査異常vs運転時異常


    元のディレクトリ|リカバリ可能な場合はチェック例外を使用し、プログラミングエラー時にランタイム例外を使用します.
    JAvaは問題の状況を通知するタイプthrowableで、以下の内容をサポートします.
  • 検査異常
  • 運転時異常
  • エラー
  • 次のステップを決める場合は以下のようになります.
  • がチェックできる場合、チェック例外は
  • である.
    プログラミングエラーが
  • の場合、非検査異常は
  • である.
  • 不確定の場合、非検査例外は
  • である.
    例外をチェックすると、必要な情報を復元する方法も提供できます.

    自制品71|try-catch


    元のディレクトリ|不要なチェック例外の使用を避ける
    実際、開発者コミュニティでもtry-catchに否定的な意見を持つ人がよくいます.先生たちの意見は主にtry-catchを無知性として使うのは無責任な開発者だと考えている.
    基本的に、間違いを投げ出すのはそんなに良い方法ではありません.
    これは、ストリーム内でエラーを放出する方法が使用できないためです.
    もちろん、
    仕方がない場合や特定の場合には、良い選択になります.
    一つは、
    すでにエラーが発生しているところにもう一度チェックエラー/非チェックエラーを投げ出すのはどんな考えですか.
    #失敗
    } catch (TheCheckedException e) {
       e.printStackTrace(); // 이런, 우리가 졌다!
       System.exit(1);
    }
    #チェックエラー
    } catch (TheCheckedException e) {
       throw new AssertionError(); // 내가 졌다!
    }
    #Optionalを返します
    } catch (TheCheckedException e) {
       return Optional<T>; // 빈 옵셔널 반환
    }

    物品72|標準例外


    元のディレクトリ|標準例外の使用
    異常の主な用途I llegalArgumentExceptionで許可されていない値がパラメータとして渡された場合、nullがNullがNull PointerExceptionとしてIllegalStateExceptionオブジェクトが実行方法に適合しない場合、nullがNullを許可されていない方法に渡された場合、IndexOutOfBounds Exception索は範囲外となるdificationExceptionの同時変更が許可されていないことを発見した場合、呼び出す方法がサポートされていない場合、ArithemicException複素NumberForamtException有理数

    アイテム73|例外翻訳


    原木|抽象化レベルに適合する例外を投げ出す
    例外翻訳とは,上層部で低レベルの例外を捉え,それを自分の抽象化レベルに合致する誤りに投射することである.
    できるだけ低レベルのエラーを解決し、
    そうでなければ、例外翻訳を利用して情報を統合することができます.
    API呼び出し元に渡すか、ログなどのライブラリを使用して記録します.

    アイテム74|例外文書


    元のディレクトリ|メソッドによって投げ出されたすべての例外を記録
    メソッドが投げ出す各例外は@throwsタグとして記録されます.
    非検査異常をメザーデン宣言のthrowsリストに入れる.
    クラス内の多くのメソッドが同じ理由で例外を放出する場合、
    クラスの説明に例外を追加する方法もあります.(NullPointerException)

    アイテム75|例外情報


    元のディレクトリ|例外の詳細に失敗に関する情報を含める
    エンドユーザーに表示するエラー情報と、例外の詳細を混同しないでください.
    例外の詳細は、開発者またはDevOpsラインで確認する情報です.
    通常、トレーススタックは、例外が発生したファイル名と行番号、およびスタックから呼び出された他のメソッドのファイル名と行番号を正確に記録します.

    アイテム76|失敗した原子コード


    できる限り失敗を原子にする
    一般的には、
    呼び出しのメソッドが失敗した場合でも、オブジェクトはメソッド呼び出し前にステータスを維持する必要があります.
    これを失敗原子状態と呼ぶ.

    アイテム77|例外を無視


    原木を無視しない
    例外を無視すると、try-catchはcatchのフィールド{}を空のままにします.
    try{
       // 에외를 발생시킬 수 있는 부분
    }catch(SomeException e) {
       // 비워두지 말자
    }
    例外を無視する理由がある場合は、次のように処理します.
    try{
       // 예외를 발생시킬 수 있는 부분
    } catch (SomeException ingnored) {
       // 왜 예외를 무시하기로 하였는지
    }