throwステートメント

例外をプログラムで作成することも可能。
それがthrowです。

#codeprettify{{ throw object; }}

objectはjava.lang.Throwable型でなければならない。


引数で受けた例外オブジェクトを投げることができます

#codeprettify{{ catch (ExceptionType param){

       ・
       ・
       ・
   throw param;
       ・
       ・
       ・

} }}

#codeprettify{{ class ThrowDemo{

   public static void main(String args[]){
       try{
           System.out.println("Before a");
           a();
           System.out.println("After a");
       }catch(ArithmeticException e){
           System.out.println("main:"+e);
       }finally{
           System.out.println("main:finally");
       }
   }
   public static void a(){
       try{
           System.out.println("Before b");
           b();
           System.out.println("After a");
       }catch(ArithmeticException e){
           System.out.println("a:"+e);
       }finally{
           System.out.println("a:finally");
       }
   }
   public static void b(){
       try{
           System.out.println("Before c");
           c();
           System.out.println("After c");
       }catch (ArithmeticException e){
           System.out.println("b:"+e);
       }finally{
           System.out.println("b:finally");
       }
   }
   public static void c(){
       try{
           System.out.println("Before d");
           d();
           System.out.println("After d");
       }catch (ArithmeticException e){
           System.out.println("c:"+e);
           <u>throw e;</u>     //eで受け取った例外オブジェクトを投げる
                           //b()のcatchで例外として引っかかる
       }finally{
           System.out.println("c:finally");
       }
   }
   public static void d(){
       try{
           int i=1;
           int j=0;
           System.out.println("Before division");
           System.out.println(i/j);
           System.out.println("After divisipn");
       }catch(ArithmeticException e){
           System.out.println("d:"+e);
           <u>throw e;</u>     //eで受け取った例外オブジェクトを投げる
                           //c()のcatchで例外として引っかかる
       }finally{
           System.out.println("d:finally");
       }
   }

} }}

結果

Before a
Before b
Before c
Before d
Before division
d: java.lang.ArithmeticException: / by zero
d: finally
c: java.lang.ArithmeticException: / by zero
c: finally
b: java.lang.ArithmeticException: / by zero
b: finally
After d
a: finally
After a
main: finally

また、新しい例外オブジェクトを作成して投げるには

#codeprettify{{ throw new ExceptionType(args); }}

ExceptionTypeは例外オブジェクトの型で、argsはコンストラクタの引数リスト(省略可能)です。
処理がthrowに進むとcatchに進みます。

#codeprettify{{ class ThrowDemo2{

   public static void main(String args[]){
       try{
           System.out.println("Before a");
           a();
           System.out.println("After a");
       }catch(Exception e){
           System.out.println("main:" + e);
       }finally{
           System.out.println("main: finally");
       }
   }
   public static void a(){
       try{
           System.out.println("Before throw statement");
           <u>throw new ArithmeticException();</u>     //例外を意図的に新たに作る
       }catch (Exception e){
           System.out.println("a:"+e);
       }finally{
           System.out.println("a: finally");
       }
   }

} }}

結果

Before a
Before throw statement
a: java.lang.ArithmeticExcection
a: finally
After a
main: finally

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS