検査例外と非検査例外 2015/09/04
ほとんどの言語では検査例外というのはなく、宣言なしに例外をスローすることができる。例外をスローするクラス名をメソッドのシグニチャの一部として書く必要があるのはJavaくらいか。
チェック例外ともいう。
Java 2017/01/24
検査例外をスローする可能性のあるメソッドには、メソッドシグニチャに
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 2017/01/24
Javaの検査例外も含めすべての例外が非検査例外の扱いになる。
メソッド定義には throws
の宣言は不要だが、
Javaとの相互運用のために throws
宣言が必要な場合は以下のように書く。
@throws(classOf[FooException])
@throws(classOf[BarException])
def method1(arg: Int): Int;
PHP 2013/09/11
検査例外の仕組みはなく、非検査例外のみ。
Ruby 2013/11/08
検査例外の仕組みはなく、非検査例外のみ。
参考 2013/11/08
- Java のチェック例外と非チェック例外の考察まとめ
http://d.hatena.ne.jp/ebc_2in2crc/20120729/1343557350