検査例外と非検査例外

ほとんどの言語では検査例外というのはなく、宣言なしに例外をスローすることができる。例外をスローするクラス名をメソッドのシグニチャの一部として書く必要があるのはJavaくらいか。

チェック例外ともいう。

Java

検査例外をスローする可能性のあるメソッドには、メソッドシグニチャに throws の宣言が必要。検査例外は Exception でかつ RuntimeException でないもの。非検査例外は Error または RuntimeException

例外クラスの階層

Throwable            (チェック例外)
  Exception          (チェック例外)
    RuntimeException (非チェック例外)
      ...            (非チェック例外)
    ...              (チェック例外)
  Error              (非チェック例外)
    ...              (非チェック例外)

throws の宣言のあるメソッド定義の例

// 抽象メソッド
int method1(int arg) throws FooException, BarException;

// 実体定義のあるメソッド
int method2(int arg) throws FooException, BarException {
    ...;
}

Scala

Javaの検査例外も含めすべての例外が非検査例外の扱いになる。

メソッド定義には throws の宣言は不要だが、 Javaとの相互運用のために throws 宣言が必要な場合は以下のように書く。

@throws(classOf[FooException])
@throws(classOf[BarException])
def method1(arg: Int): Int;

PHP

検査例外の仕組みはなく、非検査例外のみ。

Ruby

検査例外の仕組みはなく、非検査例外のみ。

参考

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク