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 {
...後処理
}