try-catch式は、例外を受け取るための、文法構造を提供します。例外は、throw式によって投げられます。6.1
try-catch式は、try部とcatch部、それにオプションのfinally部に別れます。
try部は、まず通常実行される式を書く部分で、この式実行中になんら かの例外が発生することを想定する部分です。
catch部は、例外を受取処理する部分で、1つ以上のcatch式からなりま す。catch式は、その式で受け取るべき例外と、それを受け取った場合 に実行する式を書きます。
finally部は、必須の部分ではありません。必要があるときのみ記述し ます。これは、try-catch式の最後に書かれ、例外が発生しなかったとき、例 外を受け取ったとき、どちらの場合にも実行すべき式を書く部分です。
典型的なtry-catch式は、下記のようになります
try
<式>
catch (例外クラス1 変数名1)
<式1>
catch (例外クラス2 変数名2)
<式2>
catch (例外クラス3 変数名3)
<式3>
finally
<式4>
この式の場合、try部の式がまず実行されます。
式が例外を投げることなく終わった場合は、catch部の式はどれも実行され ません。
式実行中に、例外が投げられた場合、その例外がcatch部分に記された「例 外クラス」にマッチするかチェックされます。マッチした場合は、その例外に 「変数名」が名付けられたのちに、そのcatch部分に書かれた式が実行され ます。
catch式に、同じ例外クラスが複数指定されている場合、その例外を受け取っ た場合は、最初のものだけ実行されます。
catch部に指定していない例外が投げられた場合は、さらに呼びだし元へと 例外は投げられます。このとき、finally部も実行されません。
try-catch式の文法構造は、以下のようになります。
try-catch式 `try' <式> <catch部> [`finally' <式>]
catch部 <catch式> [<catch式>]*
catch式 `catch' `(' <識別子> <識別子> `)' <式>