【Java】 例外処理rethrow(再スロー)の使い方 Java SE7以降

新米太郎
新米太郎

皆さんこんにちは新米です。

今回は例外処理rethrowについて紹介します。

Java SE7以降の内容になります。

rethrow(再スロー)とは

throw(スロー)された例外をcatchブロックでいったん受け取り
再度スローすることをrethrow(再スロー)と言います。

rethrowを使うと
例外オブジェクトにエラー内容を追記したり
別の例外クラスに、変更する事ができます。



実際に見てみよう

以下のコードは、ramdom()メソッドを使用し
分岐処理を行なっている為、実行ごとに結果が変わります。

つまり、実行する度に例外内容が変わる可能性があるってことです。

class MyExceptionA extends Exception{
  MyExceptionA(){
    super("MyExceptionA");
  }
} 

class MyExceptionB extends Exception{
  MyExceptionB(){
    super("MyExceptionB");
  }
} 

public class Sample {
  public static void main(String[] args) {
    try{
      method();
    }catch(MyExceptionA | MyExceptionB e){
      System.out.println(e.getMessage());
    }
  }

  public static void method() throws MyExceptionA,MyExceptionB{
    int num = (int)(Math.random() * 10);//1~10整数値をランダム
    try{
      if(num < 4){
        throw new MyExceptionA();
      }else{
        throw new MyExceptionB();
      }
    }catch(Exception e){
      throw e;
    }
  }
}

実行結果

MyExceptionA もしくは MyExceptionB

変数numの値によって例外結果が変わります。

rethrow(再スロー)導入のメリット

Java SE6までは、throwする例外クラスとthrows指定した例外クラス名は
同じにする必要があったため、上記の書き方ができませんでした。。

Java SE6までの記述法

    }catch(MyExceptionA e){
      throw e;
    }
    }catch(MyExceptionB e){
      throw e;
    }
新米太郎
新米太郎

rethrow導入により例外処理コードが簡素化したね。

まとめ

いかがだったでしょうか。
例外処理rethrowについて紹介でした。

試しに自分でコードを書いて実行してみて下さい。

新米太郎
新米太郎

最後まで読んでくれてありがとう。




コメント

タイトルとURLをコピーしました