例外クラス例外クラス前節で見たように、Javaで用意されているメソッドで発生する可能性があるものは、ライブラリに説明が載せられているので、その例外クラス名を使用して例外処理を記述できます。例外処理はそれ以外にも、自分で例外クラスを作って、発生(スロー)させることもできます。例外クラスを作成するには次のように記述します。Exception{...}自分で作った例外クラスは自分でスローしなくてはなりません。例外をスローするには次のように記述します。例外オブジェクト;ここで、先回作成したBusクラスを修正しましょう。今までは、乗車や降車をするときに走っていないかどうかなどを調べ、異常がある場合はその旨のメッセージを返すように作ってきました。それを例外処理に書き換えましょう。ファイル次のようにファイルを作成してください。プログラム例外を表すクラスを作成しましょう。Exceptionクラスを継承した次のようなクラスを作成してください。解説1行目でスーパークラスにExceptionクラスを指定しています。それにより今回作成したWarningExceptionクラスはスローしてキャッチすることができるようになります。例外を表すクラスは多くの場合~Exceptionのように名前を付けます。2~4行目ではコンストラクタを定義しています。このコンストラクタはインスタンス生成時にスーパークラスであるExceptionクラスのコンストラクタを呼び出しています。引数として受け取ったエラーメッセージをさらに引数として渡しています。これによりgetMessageメソッドで、引数で指定したエラーメッセージが参照できるようになります。プログラム次にBusクラスを変更しましょう。次のように修正してください。WarningException("停車してください。WarningException("満席のため、乗車できません。WarningException("停車してください。WarningException("乗客はいません。解説19、36行目では、処理の中でエラーが発生した場合は文字列を返す仕組みから例外をスローする仕組みに変更するため、戻すデータがなくなりました。そのため、戻り値の型をstringからvoidに変更しています。メソッドの処理内でWarningExceptionがスローされる可能性があるため、throws文を指定して、呼び出し側で処理をさせるようにしています。22、27、39、44行目では、エラーが発生した場合にその時のエラーメッセージをreturn文で返していましたが、throw文を使って例外をスローさせるように変更しました。プログラム次にmainソッドを変更しましょう。Run2クラスを次のように修正してください。e){System.out.println("エラーが発生しました。解説23~63行目では、try~catch文が記述されています。47、52行目で、バスオブジェクトのメソッドが呼び出されると、状態によって例外(WarningException)がスローされてきます。その場合は、59行目でキャッチされ、60行目の処理が行われます。61行目はWarningException以外がtry文の中でスローされたときにキャッチされます。catch文は複数指定することができます。try文でスローされた例外オブジェクトに応じてキャッチされます。それぞれのcatch文が上から順に評価されていきます。そのため、Exception型のcatchは最後に指定しないとエラーとなります。上の方にExeption型の指定をすると必ずそこでキャッチされ、下に指定したcatch文は使われないからです。