11月2日の学び

Stacktrace

例外のthrow箇所で文字列を引数に与えることで、スタックトレース時に例外の発生状況を確認できる。

       if (Objects.isNull(nextState)) {
            throw new NextStateException("Current State is " + name + ". " + "Next Character is " + currentString.substring(1) + ". ");
        } else {
            nextState.currentString = currentString.substring(1);
            return nextState.transitState();
        }
public class DFA extends Automaton{

    public DFA(StateSet Q) {
        super(Q);
    }

    public void isAccept(String inputString) {

        q0.currentString = inputString;

        try {
            System.out.println(q0.transitState());
        } catch (NextStateException e) {
            e.printStackTrace();
        }
    }

}

例外発生時の指針

  • どんな場合でも通知は必須。握りつぶしはダメゼッタイ!
  • 必ず例外安全なメソッドを用いる。
  • 回復可能な場合(DBへの接続失敗など)は通知して例外発生前の状態に戻す。
  • 回復不可能な場合(起動時に必要なconfigファイルが見つからない場合など)は通知してプロセス自体を終了する(起動自体を失敗させる)。

検査例外と実行時例外

throwかthrowsかやcatchの有無ではなく継承元が異なる。検査例外はExceptionを継承し実行時例外はRuntimeExceptionを継承する。