next up previous contents
Next: 14.4 throw式 Up: 14. 例外 Previous: 14.2 SystemExceptionクラス

14.3 try-catch

try-catch式は、発生するかもしれない例外を捉えるための式です。

たとえば、割算の計算を行い、そこで0割算が発生する可能性があるコードは、 try部分に書きます。そして、catch部で、 DivisionByZeroExceptionを捉えるようにすることで、0割算例外に備えること ができます。


try {

...割算の計算など...
} catch (DivisionByZeroException e) {
...0割算が発生したときの対策コードを書く...
}

try部で発生するすべての例外を捉えたいときには、catch部でExceptionクラスを補足するようにします。例外インスタンスは、すべてExceptionクラスのサブクラスなので、Exceptionを捉えることにより すべての例外を補足することができます。なお、この場合、補足した例外イン スタンス自身は、Exceptonクラスのサブクラスですから、IsInstanceOf を使うことにより、例外インスタンスのクラスを特定することができます。


try {

...何かの計算など...
} catch (Exception e) {
// すべての例外をここで捉えることができる
if (e->IsInstanceOf (DivisionByZeroException)) {
...0割算例外に対応した処理
} else if (e->IsInstanceOf (ArrayOutOfBoundsException)) {
...配列例外に対応した処理
} else if (e->IsInstanceOf (TypeMismatchException)) {
...データ型例外に対応した処理
} else {
...その他の例外に対応した処理
}
}

また、catch部は、複数書くこともできます。この記法で、個別の例外 処理に対応することもできます。


try {

...何かの計算など...
} catch (DivisionByZeroException e) {
...0割算例外に対応した処理
} catch (ArrayOutOfBoundsException e) {
...配列例外に対応した処理
} catch (UserDefinedException e) {
...ユーザ定義の例外に対応した処理
}

catchで捕捉しない例外は、実行中の関数/メソッドを終了して、その呼 び元に制御を返します。最終的に例外がプログラムで捕捉されない場合は、そ のプログラムは終了します。

例外が発生なかった場合と、例外が発生した場合、共通の後処理を行なうため に、finally部を書くこともできます。これは、必ず try-catch 式の最後に置き、以下のように記述します。


try {

...何かの計算など...
} catch (DivisionByZeroException e) {
...0割算例外に対応した処理
} catch (ArrayOutOfBoundsException e) {
...配列例外に対応した処理
} catch (UserDefinedException e) {
...ユーザ定義の例外に対応した処理
} finally {
...後処理
}


next up previous contents
Next: 14.4 throw式 Up: 14. 例外 Previous: 14.2 SystemExceptionクラス
Tetsuo Ono
1998-11-05