【レポート】例外処理について理解

【レポート】例外処理について理解

目的

例外処理について理解し、使えるようにする。

内容

これまでのプログラムを参考に、意味のあるプログラムを作成し、その中に、例外を実装し、そのプログラムを実行し検証する。

ソースプログラム

以下にCarクラス、CarExceptionクラス、Tester13クラスを以下の図1~3に示す。

Carクラス

図1

CarExceptionクラス

図2

Tester13クラス

図3

実行結果

3のソースプログラムの実行結果を以下の図1に示す。

図1

考察

 今回のプログラムはクラスが3つあるが、呼び出される順としては、mainメソッドをもつTester13クラスだ。このクラスは、まずCarクラスのインスタンスを生成する。この時、Carクラスのコンストラクタが呼ばれて初期化される。これが終わると次は、try{ car1.setCar(3211,-13.0); }だ。Try{}の中にプログラム書くとそのプログラムの例外の発生を調べる。そして、tryブロック中で例外が起きると、そこで処理を中断して、例外がcatchブロックという、例外が起きたときに例外の種類と一致していれば処理するとこで、処理を行う。そして、例外が起きる、起きないに関わらず、そのメソッド内で最後に必ず処理が行われるfinallyブロックもある。Finallyブロックある理由として、例外処理では、例外が起きたメソッド内でcatchブロックが見つからなかった場合に、呼び出し元のメソッドに戻って、catchブロックが探されることになっている。この為、例外の発生に関わらず、そのメソッド内で必ずいっておきたい重要な処理がある場合には、finallyブロックの中に書いておかなければならない。そうでないと例外が発生した際に、その重要な処理が飛ばされたままプログラムの処理が進んでしまう場合があるからだ。

 今回のプログラムは例外を受け取って処理するコードを記述するのではなく、例外を起こすコードを作成した。つまり、自分の設計したクラスの中に、例外を送出する仕組みを持たせた。この仕組みは、誰か別の人に自分のクラスを利用してもらうときに便利だ。例外を送出するクラスを設計するクラスを設計しておくことで、クラスを利用する人がエラーに対する処理を記述することが出来る。そこで、まず最初に自分で例外クラスを作成します。例外クラスを作ることが出来れば、様々な例外を起こす準備が出来る。自分で例外クラスを作るには、Throwableクラスのサブクラスを拡張して例外クラスを宣言することが必要である。今回は、ThrowableクラスのサブクラスのExceptionクラスから、CarExceptionクラスという独自の例外クラスを拡張した。次に例外クラスができたら、例外を送出する方法を学ぶ。例外を送出するには、throwという文を使用する。今回のプログラムでは、CarクラスのsetCarメソッドでthrowを使っている。また、このメソッドのpublic void setCar(int n,double g) throws CarException{・・・}のthrows CarExceptionは、例外を送出する可能性があるメソッドであることを宣言している上、CarException e=new CarException();は例外のオブジェクトを作成している。

 話を戻し、プログラムを見ていくと、car1.setCar(3211,-13.0);でsetCarメソッドを呼びだし,if文でg<0と評価している。今回g=-13.0とg<0を満たす為、if文の中身を見ていくと、先程も説明した通りCarException e=new CarException();と例外のオブジェクトを作成しており、次にthrow e;と作成したオブジェクトを送出している。送出先は、catchブロックだ。Catchブロック内ではSystem.out.printlnによって”ガソリンにマイナスの値はありません”が出力される。また、次のSystem.out.println(e+”が送出されました。”);と例外クラスのクラス変数eを出力することにより例外の種類が分かる。これが終わると、car1.show();とCarクラスのshowメソッドを呼び、車のナンバー、ガソリン量をSystem.out.printlnによって出力すれば、終了だ。また、gの部分が1以上なら例外処理は起こらず終了となる。

まとめ

例外は、try,catch,finallyブロックを使って処理する。独自の例外のクラスを作るには、Throwableクラスのサブクラスを拡張し、例外を送出するにはthrow文を使用する。例外を送出する可能性のあるメソッドにはthrowsを付ける。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です