throwを使って例外を扱う


Javaでは例外の処理方法が2通りあります。
1つは自分で処理(catch)する、もう1つは他人(メソッドの呼び出し元)に任せる(throw)のいずれかです。
下のsampleはExamThrow2で発生した例外の処理を呼び出し元( ExamThrow )に任せています。

import  java.io.*;

public class  ExamThrow  {
    public  static  void  main(String  args[])  {
        ExamThrow2  et2  =  new   ExamThrow2();
        try  {
               FileInputStream  fis  =  et2.fileConnect("test.txt");
               System.out.println(fis);
        } catch(IOException  ioe)  {
               System.out.println(ioe);
        }
    }
}

class  ExamThrow2  {
    FileInputStream  fileConnect(String  file_name)  
              throws FileNotFoundException,  IOException  {
              FileInputStream  fis  =  new FileInputStream(file_name);
              return  fis;
    }
}


<実行結果>
カレントディレクトリにファイル"text.txt"がある場合、コンソール画面に

java.io.FileInputStream@47e553

と表示されます。@以降のハッシュコードはその都度変わります。

カレントディレクトリにファイル"text.txt"が無い場合、コンソール画面に

java.io.FileNotFoundException: text.txt (No such file or directory )

と表示されます。

catch文ではIOExceptionでまとめて、catchされていますが、.FileNotFoundExceptionである事は判別できます。

<自分で例外を生成する>
sampleではFileInputStreamがthrowしたFileNotFoundExceptionを扱っていますが、
プログラムの中で例外クラスのオブジェクトを生成し、throwすることも出来ます。
    thow new IOException(String Message);

生成される例外はメソッド宣言のthrows以下で扱われなければいけません。
(java.lang.RuntimeExceptionを継承する例外は明示的に記述されなくても構いません。)
throwsはメソッド宣言文の中で使い、throwは例外の生成時に使います。