複数の例外

前のところで例外の基本的な定義の仕方はわかったと思います。
しかし例外が複数発生する場合もあります。
そのときは、複数のcatchブロックを記述し受け取る例外クラスを指定して
やる必要があります。

例外は上のcatch文から順に照合され当てはまるcatchブロックの例外が 処理されます。

複数の例外の定義方法

 try{
 
        例外が発生する可能性のある処理


   }catch(対処する例外クラス  e){


    例外発生時の処理


   }catch(対処する例外クラス  h){


    例外発生時の処理
   }

このようにcatch文を複数記述します。

ではサンプルプログラムで確認します。

サンプルプログラム(Sample63.java)

class Sample63{
    public static void main(String args[]){
  try{
       int x = 10;
       int y = 0;
     System.out.println("x / y は" + (x / y));

}catch(ArithmeticException e){
    System.out.println("例外発生");
    System.out.println("整数を0で除算できません");

}catch(Exception h){

     System.out.println("それ以外の例外が発生しました");

}
    }

}
            

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

貴女の空いた時間を有効活用してみませんか?
初心者・中高年の方でも安心なお仕事です。
独自SSLが年間18,000円。レンタルサーバー『ヘテムル


コンパイル・実行します。

今度は整数を0で割ったときの起こりうる例外です。

ArithmeticExceptionは 整数を0で除算したときに起こる例外になります。

したがって一つ目のcatchブロック内の処理を行われています。
もしもそれ以外の例外が発生した場合は次のcatch文に処理が移ります。

ちなみにExceptionクラスは全ての例外クラスのスーパークラスになります。
このように記述しておけばどの例外が発生しても対処できるようになります。

サンプルプログラム(Sample63_1.java)

class Sample63_1{
    public static void main(String args[]){
 try{
       int i[] = new int[3];
       i[4] = 5;

      System.out.println("i[4] は " + i[4]);
}catch(ArithmeticException e){
    System.out.println("例外発生");
    System.out.println("整数を0で除算できません");

}catch(Exception h){
     System.out.println("それ以外の例外が発生しました");

       }
} }
プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

今回はtryブロック内では配列の要素数を超えるi[4] = 5;を定義しています。
したがって、例外は ArrayIndexOutOfBoundsExceptionが発生しますが、
catchブロックでは定義されていません。

しかし、全ての例外クラスのExceptionクラスが定義されているので、例外は一番下の 例外の中の処理が行われます。

このようにしておくと必ず例外処理をしてくれるわけです。

しかしひとつ注意があります。

複数のcatchブロックを指定するときの順番としては、クラス階層の下のものから
つまり、サブクラスから記述しないといけない決まりがあります。
したがって、Exceptionクラスは一番最後に書かなければいけません。
次のようなプログラムはエラーになります。

サンプルプログラム(Sample63_2.java)

class Sample63_2{
    public static void main(String args[]){
  try{
       int x = 10;
       int y = 0;
     System.out.println("x / y は" + (x / y));

}catch(Exception h){
     System.out.println("それ以外の例外が発生しました");

}catch(ArithmeticException e){
    System.out.println("例外発生");
    System.out.println("整数を0で除算できません");
     }
    }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行します
このようなエラーが出ます。

まとめ

複数の例外処理を行うときは一番最初に記述した例外から処理が行われます。
最初の例外が発生しなければ次のcatch文に処理が移されます。

したがって例外処理を行うときはクラス階層の下のクラスから記述しなければいけません。

すなわちすべての例外クラスのスーパークラス(親クラス)であるExceptionクラスを
一番最後に記述しなければいけません。

ページのトップへ戻る