エラーと例外の基礎

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


エラーと例外の基礎

これまでに作成したプログラムの中には、ビルドエラーにはならないものの、実行時にプログラムが強制終了してしまうものがありました。プログラムが強制終了する理由には、「エラーが発生した」か「例外が発生した」のどちらかが該当します。

ここで注意しなければならないのは、Javaにおいては、「エラーが発生する」こと、「例外が発生すること」、それから「プログラムが強制終了すること」とでは、意味が異なるということです。これらの用語は区別しなければなりません。

まず、「プログラムが強制終了すること」については、「エラーが発生するとプログラムが強制終了する場合がある」、また「例外が発生するとプログラムが強制終了する場合がある」という関係になっています。そして、エラーと例外については、以下のように言葉の定義が分けられています。

  • エラー(Error)…プログラム実行中に Java仮想マシンでは手に負えないような異常な出来事が起こった場合に発生する。
  • 例外(Exception)…プログラム実行中に異常な出来事が起こった場合に発生する。

さらに、例外は以下の 2種類に分類されます。

  • ランタイム系例外(RuntimeException系)…コンパイラによってチェックされない例外。
  • 非ランタイム系例外(非RuntimeException系)…コンパイラによってチェックされる例外。

今のところは「エラーと例外とは異なるものだ」と理解していただければ大丈夫です。

エラー

エラーは、Java仮想マシンでは手に負えないような異常な出来事が発生してしたことを表します。そのため、プログラムが強制終了することは致し方ないということになります。

エラーも、後述する try catch構文を用いて捕捉することは「文法上は」可能ですが、現実には、捕捉したところでどうにもならないため、try catch構文を使用することはありません。

例外と try catch構文

例外については、「例外の発生」が即「プログラムの強制終了」とはならないための仕組みが用意されています。例外が発生したときに、それを捕捉し、各種の処理を行うための構文がtry catch構文です。大まかな構文の構造は以下の通りになります。

		try {
			; // 例外が発生するかもしれない処理
		} catch(Sample1Exception e) {
			; // Sample1例外が発生したときの処理
		} catch(Sample2Exception e) {
			; // Sample2例外が発生したときの処理
			
		…
		
		} finally {
			; // 必ず行う処理
		}

このうちtry, catch, finallyは予約語になります。なお、finallyについては後の節で解説します。

なお、本章では例外を受け取る側と例外を投げる側の両方について解説します。それぞれ関係する予約語は以下になります。

  • 例外を受け取る側の予約語… try, catch, finally
  • 例外を投げる側の予約語… throw, throws

throwはスローと読み、「投げる」という意味です。野球などで使用されるアンダースローとかサイドスロー、サッカーで用いられるスローイングなどのスローです。 catchはキャッチと読み、「捕捉する」という意味です。キャッチボールやキャッチフレーズのキャッチです。なお、この章において投げたり受け取ったりするのは、(ボールではなくて)インスタンスです。

エラーと例外のクラス構造

この後の節で、エラーについての概要と、例外を受け取る方法と、例外を投げる方法を学んでいきます。エラーや例外の実体はインスタンスです。インスタンスというからには、元となるクラスがあります。エラーや例外に関するクラスの継承関係を言葉で表すと以下の通りになります。

  • Throwalbeクラスは、Objectクラスのサブクラスである。
  • Errorクラスは、Throwableクラスのサブクラスである。
  • Exceptionクラスは、Throwableクラスのサブクラスである。
  • RuntimeExcetionクラスは、Exceptionクラスのサブクラスである。

これらのクラスと、エラー・ランタイム系例外・非ランタイム系例外の関係をイメージとして表すと、以下のような感じです。メソッド・フィールドの記述は省略しています。

エラーと例外

これらのクラスについての詳細について気になる方は、説明書(API)を参照してください。Java SE 7(Java 1.7)の説明書(API)を掲示しておきます→ThrowableクラスErrorクラスExceptionクラスRuntimeExceptionクラス

なお、Throwableはクラスです。後の章で解説するインターフェイスのような名前になっていますが、クラスです。

最終更新: 2014/08/01 , 公開: 2013/02/28
▲top