・ 例外の検出と処理

例外を検出するためのキーワードが try です。 try はブロック内の処理で発生した例外をすべて検出し、 後に続く catch のブロックのうちの該当する処理を呼び出します。
例外発生に対応したエラー処理を記述するためのキーワードが catch です。 catch の後の《(》 《)》 内には検出された例外のオブジェクトが渡されます。 例外はクラス名によって処理を選択するのに持ちいられるのと同時に、 そのオブジェクトは例外処理内でデータとして利用される引数でもあります。 例外のクラスとは Exception またはそのサブクラスです。
try と catch はブロック単位である点は if と else の関係と似ています。 場合分けのスタイルはむしろ switch と case の関係に似ています。 try に対して最低1つは catch が必要です。
キーワード finally のブロックは、 try ブロックの処理に伴って必ず呼び出されます。 該当する例外のクラスが見つからなかった 場合の処理を書けるのは、 switch case における default に似ています。ただし、 finally の内容は catch の処理が実行された場合でも必ず呼び出される点が違います。 また、try のブロックの処理が return, break, continue によって 途中で中断された場合にも呼び出されます。


try {
}
catch( Exception1 e ){
}
catch( Exception2 e ){
}
catch( Exception3 e ){
}
finally{
}

catch で指定される Exception のクラスのチェックは、 上から下に記述された順番に行われます。 したがって、ある Exception のクラスのサブクラスは、必ず上の位置に記述 しなくてはいけません。(これはコンパイル時にチェックされます。) 互いに継承関係がない Exceptionのサブクラスどおしの順番は任意でかまいません。
例外処理を細かく処理する必要が無い場合は、 共通のスーパークラスを指定した catchで処理してもかまいません。 極端な場合は、Exceptionクラスの単独の catch で処理することも可能です。

・ 例外の発生

例外が発生したことを知らせるためのキーワードが throw です。 throw は try の中の処理から呼び出される側のメソッドに記述されます。 throw を行うメソッドは、 その宣言部分でどんな例外を渡すのかキーワード throws によって宣言します。


public method() throws SpecialExeption {

       throw new SpecialException("Error message");
}

throw文が呼び出されると、 処理はメソッドを呼び出している側の対応する catchのブロックにジャンプし、 throw文以降に記述されている処理は行われません。
throw で渡されるのは例外クラスのオブジェクトです。(クラスではありません。) 上の例のように throw の前にコンストラクタを呼び出して 例外のオブジェクトを生成する必要があります。