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を継承する。