10月31日の学び

昨日ちょっと書いたことの続き

Javaの例外の概要

  • Javaでは例外が発生しうる処理を呼び出した時try/catch構文を用いて「例外を回復」するか、thorws句にてその例外を上位レイヤーに「通知」するかのどちらか
  • どこで誰が「通知」「回復」するかは設計時に考慮が必要

検査例外

  • もともと例外が発生することを事前に想定しその処理を仕様として扱う
  • 処理を行ったときに発生する可能性のある例外をthrow句にて宣言
  • 呼び出し元でcatchがないとそもそもコンパイルできない
  • 拡張性を考慮して検査例外を使うにはクラス設計の段階から発生しうる例外を種別毎に意識しておくことが必要
class DataStorage {
  DB storage = DB.initialize();

  public Data read(string key) throws DBException {
    return storage.find(key);
  }
}

qiita.com

非検査例外

  • 例外が発生した場合にcatch節やthrows句で対応してはならない/対応する必要はない例外
  • RuntimeExceptionとそのサブクラスが非検査例外
class Example {

    public static void main (String[] args) {
        Example.methodA();
    }

    public static void methodA() {
        throw new RuntimeException("throws unchecked exception");
    }
}