例外クラス階層

C++

例外オブジェクトのクラスは決まっておらず、任意のクラスのインスタンスや文字列などなんでもよい。

Java

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

すべての例外クラスの親クラスは Throwable で、その直接のサブクラスは ExceptionError のみ。

Exception のサブクラスは RuntimeException だけではない。 Exception とそのサブクラスはチェック例外だが、 RuntimeException とそのサブクラスは例外的に非チェック例外になる。

Error とそのサブクラスも非チェック例外で、 NoClassDefFoundError, NoSuchMethodError, StackOverflowError, OutOfMemoryError などがある。

ユーザ定義のクラスは、Exception のサブクラス(RuntimeException のサブクラスを含む)とするのが推奨。

Scala

Javaと同じクラスが使われる。ただし、Javaのチェック例外も含めてすべての例外クラスがScalaでは非チェック例外になる。

PHP

すべての例外クラスは Exception クラスかそのサブクラスである。

例外 | PHP Manual
http://php.net/manual/ja/language.exceptions.php

Exception | PHP Manual
http://php.net/manual/ja/class.exception.php

Ruby

すべての例外クラスは Exception クラスかそのサブクラスである。ユーザ定義のクラスは StandardError のサブクラスとするのが推奨。

rescue節でクラス名を省略すると StandardError が指定されたとみなされ、それ以外の Exception は補足してくれない。 StandardError 以外の Exception は、例えばメモリ不足、スクリプトの文法違反などが該当する。

Perl

標準の例外クラスというのはない。

die には普通は文字列を渡す。

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