例外時の処理Advertisement例外時の処理。tryとcatch
例外が発生した場合、try〜catchのメカニズムを使用して対応することができる。
例外発生の可能性がある処理を try ブロックの中に記述する。そして、例外発生時の処理を catch ブロックの中に記述する。 サンプル
public class Test{
public static void main(String args[]){
int[] array = new int[10];
try{
for(int i = 0; i <= 10; i++){
array[i] = i;
}
}catch(Exception e){
System.out.println("例外発生:" + e);
}
}
}
catch() の引数 e に例外の詳細が格納されている。
例外発生:java.lang.ArrayIndexOutOfBoundsException: 10 ArrayIndexOutOfBoundsException クラスの派生関係を調べてみると以下の通り。
java.lang.Object
|
+--java.lang.Throwable
|
+--java.lang.Exception
|
+--java.lang.RuntimeException
|
+--java.lang.IndexOutOfBoundsException
|
+--java.lang.ArrayIndexOutOfBoundsException
※java.sun.comより転載
catch(RuntimeException e)やcatch(ArrayIndexOutOfBoundsException e)でもキャッチできる。要するにポリモルフィズムを実現できる。どの程度の範囲でキャッチしたいのかを考えて使う。通常は一番低いレベル(この場合、ArrayIndexOutOfBoundsException)でキャッチする。 応用
catch() ブロックは複数記述することができる。これにより、発生した例外による処理の分離をする事ができる。
例
public class Test{
public static void main(String args[]){
try{
int[] array = new int[(int)(Math.random()*10 - 5)];
array[10] = 1;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("配列の要素外にアクセス。");
}catch(NegativeArraySizeException e){
System.out.println("配列を負の要素数にしようとした。");
}
}
}
プログラムの実行ごとにランダムで ArrayIndexOutOfBoundsException または NegativeArraySizeExceptionが発生するから、例外の種類によって処理を分けている。※例外が発生した時点で catch ブロックに入るため、例外発生時には try ブロック内のその後の処理は実行されない。 finallyブロック
finallyブロックには、例外が発生した場合/しなかった場合、共に必ず行いたい処理を書く。
public class Test{
public static void main(String args[]){
try{
//この時点で負の配列を作ろうとするかも
int[] array = new int[(int)(Math.random() * 10 - 3)];
//もしかしたらこれは要素外アクセスかも
array[4] = 100;
//ここまでくれば大丈夫。
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("配列の要素外にアクセス。");
}catch(NegativeArraySizeException e){
System.out.println("配列を負の要素数にしようとした。");
}finally{
System.out.println("ここはfinallyブロック");
}
}
}
結果は3パターン。結果1 配列の要素外にアクセス。 ここはfinallyブロック結果2 配列を負の要素数にしようとした。 ここはfinallyブロック結果3 ここはfinallyブロック 実行ごとに結果は違うけれど、例外が発生した時も、しなかった時も finally ブロックの処理は実行されている。 Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |