throws

例外を発生する可能性のあるメソッド内で例外処理を行うときにはtry-catch文を使用しました。
しかし例外が発生する可能性のあるメソッド内ではなく、
このメソッドを呼び出す呼び出し側で例外処理を行うことが出来ます。
そのときに使うキーワードがthrowsです。

throwsの記述方法

class Sample{
 public static void main(String args[]){
      try{

        obj();

        }catch(Exception e){      //obj()からパスされた例外をキャッチ

   //例外処理

   }

 
    }

   static void obj() throws Exception{
        
      処理

 }

}

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

class Sample97{
    public static void main(String args[]){
  try{
      obj();

 }catch(Exception e){

    System.out.println("例外が発生しました");
    System.out.println("例外の種類は" + e);

  }
    }

   static void obj() throws Exception{

   //配列の要素数を超えているので例外が発生します

     int i[] = new int[3];
    i[4] = 100;
   }

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

Sponsored link

コンパイル・実行します

結果はこのようになります。
つまりここではobj()メソッド内では存在しない配列の要素に対して値100を代入しています。
しかしobj()メソッドは throwsが定義されています。

また、このobj()メソッドの呼び出し元 try catch文を使用してobj()メソッドをtryで囲んでいます。
例外が発生した場合のためにcatch文で例外処理を行っています。

つまりこのプログラムではobj()メソッドをthrowsで定義することで
もしobj()メソッド内の処理で例外が発生したらobj()メソッドの呼び出し元であるmain()メソッドに例外処理を任せています。

次のプログラムを見ていきます。

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

class Sample97_1{
    public static void main(String args[]){
  try{

    Sample97_1.obj();

 }catch(Exception e){
    System.out.println("例外が発生しました");
    System.out.println("例外の種類は" + e);
  }
    }
   static void obj() throws Exception{

   //配列の要素数を超えているので例外が発生します
     int i[] = new int[3];
    i[1] = 100;
  System.out.println("i[1] = " + i[1]);

    }

}

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

Sponsored link

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

今度はobj()メソッド内では例外が発生しない処理を記述しています。
その場合はもちろんobj()メソッド内の処理が実行されます。

ページのトップへ戻る