
新米太郎
皆さんこんにちは新米です。
今回は例外処理rethrowについて紹介します。
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
rethrow(再スロー)導入のメリット
Java SE6までは、throwする例外クラスとthrows指定した例外クラス名は
同じにする必要があったため、上記の書き方ができませんでした。。
Java SE6までの記述法
}catch(MyExceptionA e){ throw e; } }catch(MyExceptionB e){ throw e; }

新米太郎
rethrow導入により例外処理コードが簡素化したね。
まとめ
いかがだったでしょうか。
例外処理rethrowについて紹介でした。
試しに自分でコードを書いて実行してみて下さい。

新米太郎
最後まで読んでくれてありがとう。
コメント