Java - try .. catch

try .. catch

Java ではコンパイル時に発生するコンパイルエラーと、実行時に発生する実行時エラーがあります。実行時に発生したエラーに対しては、例外処理と呼ばれる別処理を行うことができます。

実行時に発生するエラーとは、いわゆる予期しないエラーです。例えば、ファイルを読み取ろうとした場合、そのファイルが存在しないなどのエラーです。ファイルが存在するかどうかはコンパイルの時点では判断することができないため、実行時に初めてエラーになります。

以下は、コンパイルは成功しますが、実行時エラーとなるサンプルコードです。

int n[] = {1, 2, 3};
for (int i = 0; i < 4; i++){
  System.out.println(n[i]);
}
try .. catch

上記のサンプルコードは、配列の要素数を超えて参照しようとしたためにエラーが発生しています。このようなプログラムの実行中にエラーが発生することを例外が発生したと言います。例外が発生した場合、プログラムはその時点で終了し、それ以降の処理は実行されません。

例外が発生した場合、プログラムを終了せずに指定した処理を行うための仕組みが例外処理です。例外処理は try 文を使用します。書式は以下のとおりです。

try{
  ...
} catch (例外クラス 変数名){
  ...
}
try .. catch

プログラムの中で例外が発生するかどうかを調べる対象範囲を try ブロックで囲みます。そして、例外が発生した場合に行いたい処理は catch ブロック内に記述します。

try ブロック内で例外が発生すると、処理は catch ブロックに移ります。Java では例外の種類毎にクラスが用意されており、例外が発生すると対応するクラスのオブジェクトが catch に渡されます。

try に対する catch はいくつも記述できます。そのため、発生する可能性のある例外について複数の catch を記述しておき、別々の処理を行わせることも可能です。もしも発生した例外に一致する catch がなければ何も処理を行いません。

catch ブロック内に記述された処理が実行されると、try 文全体の処理が終了し、次の処理に移ります。

int n[] = {1, 2, 3};

try{
  for (int i = 0; i < 4; i++){
    System.out.println(n[i]);
  }
} catch(ArrayIndexOutOfBoundsException e) {
  System.out.println("インデックスの範囲を超えています");
}
try .. catch

関連記事