{Java:Exception(2)カスタム例外、強制異常、変換異常


クラスノートからコンテンツを抜粋し、李応秀先生の授業。のコメントおよび画像を参照してください.
自分で理解するために書いた文章であれば、不正確な点があるかもしれませんので、参考にしてください.

カスタム例外、強制例外、変換例外


📌 カスタム例外クラス

  • Checked例外クラスの作成:Exceptionクラスを継承します.
  • は、強制的に例外処理を実行する例外クラスを定義する.
  • Unchecked例外クラスの作成:RuntimeExceptionクラスを継承します.
  • は、例外処理を強制しない例外クラスを定義する.
  • 現在、ほとんどの人がUncheckedカスタム例外クラスが好きです.

  • 作成方法
  • コンストラクタメソッドを定義する場合、親クラスのコンストラクタメソッドを呼び出すsuper()メソッド.
    使用する必要があります.
  • エラー情報に必要なメンバー変数を追加できます.
  • 合成ターゲット
  • アプリケーションに最適化された例外を定義できます.(Java提供とは異なる)
  • アプリケーションの例外タイプを簡略化できます.
    (カスタム例外タイプに統一可能)
  • 例外のタイプを簡略化することができるので、最後の段階で例外に対するバッチ処理が簡単になる.
  • 以上のエラーメッセージを表すことができます.
  • エラーについてより正確な内容を伝えることができます.文法上の問題だけでなく、ビジネスロジック上の問題もメッセージに内容を書き、異常を引き起こす.
  • 異常の処理は一つの場所に集中して行われるので、処理よりも適切な異常を発生させることが重要である.
  •     public class HtaException extends RuntimeException {
        
        	private static final long serialVersionUID = 9175601348921699186L;
        
        	public HtaException(String message) {
        		super(message);
        	}
        	
        	public HtaException(String message, Throwable cause) {
        		super(message, cause);
        	}
        }
    💡 serialVersionUIDSerializableインタフェースの実装クラスは、serialVersionUIDとして定義されるべきである.コンパイルエラーは発生しませんが、主にネットワークを介してオブジェクトを交換するために使用されるクラスの識別番号です.
  • の目的の定義
    快速識別
  • 図面
  • を再コンパイルしても、同じデザインが異なると認識されないように、識別番号を変更しないでください.
  • 💡 例外クラスの作成の意味Exceptionクラス
    -String値を受信してメッセージとして保存する作成者
    -Throwableインプリメンテーション可能なオブジェクトを受信し、結果として生じる例外を格納するコンストラクション関数があります.ExceptionまたはRuntimeExceptionクラスを継承した사용자정의 예외클래스もJavaライブラリの他の例外クラスと同様です.
    メッセージと例外を引き起こすオブジェクトを格納できるように定義します.
    この生成プロセスは、例外の内容を特定しません.
    これは、基本的に例外オブジェクトを作成し、コンテンツを格納し、使用可能にするクラスの生成方法です.

    📌 強制異常発生

  • ビジネスロジック上のエラー(パスワードの不一致、残高不足、ログイン失敗など)が発生した場合、強制的に異常が発生し、その機能を呼び出した側にエラーが発生したことを通知します.
  • throw キーワードを使う.
  • throwによって開始されたUnchecked例外オブジェクトは、個別に処理しない場合、次の呼び出し元として委任されます.△処理は強制ではなく、押し倒された.

  • 📌 変換例外

  • 実際に発生する異常ではなくカスタム異常を発生する
  • .
  • throw キーワードを使う.
  • throw新規例外クラス(エラーメッセージ、実際に発生した例外)
  • カスタム例外オブジェクトと実際に発生した例外(原因異常=原因)オブジェクトのすべての情報が出力されます.
  • の複数の例外の処理と比較して、カスタム例外を1つだけ処理することを目的としている.
  • 例外タイプ簡略化
  • では、エラーの部分がわかりやすくなります.
  • カスタム例外ではなくcatchブロックで
  • メソッドで発生した様々な例外をキャプチャできます.
  • カスタム例外は、処理を必要としないように再記述されます.
  • 実際に発生した異常に関する情報は、
  • causeパラメータ値によって伝達することができる.
  • カスタム例外クラスを親クラスと複数のサブクラスに分け、catchは親クラス-カスタム例外クラスタイプとして定義-throw文でサブクラスを使用する場合に具体的な区分を行うことができます.
  • 💡 変換例外
    カスタム例外クラスはuncheckedです.checkedの場合は、このような例外処理を行う必要があります.複数の例外を同じカスタム例外クラスにマージして渡すことを目的としています.
    try {
        예외발생이 예상되는 코드 // SQLException 이 발생예상됨
      } catch (SQLException e) {
        throw new 사용자정의예외클래스("메세지", e);
      }
    public class CommonUtils {
    
    	public static int stringToInt(String text) {
    		if (text == null) {
    			// 사용자 정의 예외객체 발생시키기
    			throw new HtaException("text는 null일 수 없습니다.");
    		}
    		if (text.isBlank()) {
    			// 사용자 정의 예외객체 발생시키기
    			throw new HtaException("Text가 빈 문자열이거나 공백문자입니다.");
    		}
    		try {
    			int value = Integer.parseInt(text);
    			return value;
    		} catch (NumberFormatException ex) {
    			// 예외의 변환
    			// Integer.parseInt()메소드가 발생시킨 NumberFormatException을 catch에서 잡고, 대신 HtaException을 발생시키기
    			throw new HtaException("text에 숫자가 아닌 문자가 포함되어 있습니다.", ex);
    		}
    	}
    	
    }
    💡 例外自体が発生すると、メソッドブロック内の「クイック終了」が発生します.
    したがって、戻り値ではなく戻り値のメソッドで異常が発生した場合、コンパイルエラーは発生しません.
    ただし、if文に異常が発生した場合、if文がfalseの場合-戻り値がない場合-も考慮してください.
    (if文内で異常が発生した場合、if文外で何も返されなかった場合はエラー)

    📌 階層プログラミングにおける例外

    표현계층 / 서비스계층 / 영속화계층アプリケーション開発用
    開発は3つの階層に分かれています.

    ビジネスロジックを実行する서비스계층(サービスクラス)では、実行中にビジネスロジックに違反した場合に異常が発生します.영속화계층(DAOクラス、Repositoryクラス)は、特別なビジネスロジックを実行することなく、ビジネスロジックを実行するために必要なデータアクセス操作をサポートします.
    発生した異常は、最終位置표현 계층(Controllerクラス)で一括処理される.その前に委任を続行します.