next up previous contents
Next: trycatch Up: File I/O Previous: FileInputStream と FileOutputStream

try と catch

入出力に関して、リスト1とリスト2との違いを述べてきましたが、CとJava の二つの プログラムを比べてみたとき、これ以上に大きな違いがあることに気付いていると 思います。それは、Java のプログラム中に、try と catch という、Cには存在しない 文が現れていることです。

Java は、構文的には、Cの制御構造を忠実に受け継いでいます。Cを知っていれば、 Java のプログラムを読むことは、比較的容易です。ただ、最初にJava のプログラムを 見た時、Cとの違いとして、一番目に飛び込んで来るのは、この try とcatch です。

try と catch は、組になって用いられます。片方だけで登場することはありません。 基本的には、 try .... try block ..... catch ( Exception e ) ..... という形をして、try block 中で、エラーなど例外的な処理が起きたら、try block での実行を中断して、tryに対応するcatch句を実行します。

もう少し正確にいえば、tryブロック中のあるメソッド達は、例外的な状態に遭遇した ら特定のオブジェクトをほうり投げるように、あらかじめプログラムされています。 catch句の、catch(....) .... の、(....)の部分は、キャッチすべきオブジェクトの クラスを指定し、同時に、catch句の中で、そのキャッチされたオブジェクトにつける 名前を記述します。tryブロックから、複数のオブジェクトが投げられる 可能性があるのなら、catch句を複数つなげることで対応します。 ですから、次のような構文が可能となります。

  try {
      ........
      ........
  } 
  catch ( ClassA a) {
      ........
  }
  catch ( ClassB b) {
      ........
  }
  catch ( ClassC c) {
      ........
  }

リスト1では、一つ一つの関数を呼び出すたびに必要なエラー処理をしているのに 対して、リスト2では、全体を一つのブロックにまとめて、Exception オブジェクトが 飛んでくるのを待っています。これは、エラー処理としては、少し手抜きです。



maruyama@wakhok.ac.jp