Javaの例外処理について学ぶ2017-07-30Javaの例外処理について学ぶプログラミング「Javaプログラミング技法」の第13回目の授業内容まとめになります。例外処理の基礎プログラムの実行中に発生するエラーを例外といい、例外の発生時に正常時の実行フローから異常時の実行フローへ切り替えることを例外処理とよぶ。例外が発生したときに放置すると、下記のような不具合が生じる可能性がある。途中結果をファイルに書き込むはずが、ファイルのアクセス権が無く、書き込みに失敗した。本来ならこの段階で例外処理を行うべきだったプログラムは書き込みを失敗したまま、処理を先に進めてしまう。その後、プログラムが途中結果を確認すると、ファイルには何も書かれていなかった。プログラムは途中結果が空の文字列として処理が進み、予想できない動作を起こしてしまった。エラーの種類エラーには設計時のエラーと実行時のエラーの2つがある。文法の間違いや変数に異なる型の値を代入したりするなどのコンパイル時にエラーが通知されるもの。System.out.println(i)設計時のエラーはそもそもコンパイルが通らないので、例外処理で対応する必要がない。実行時のエラーコンパイル時にはわからず、実行時にエラーが通知されるもの。Integer.parseInt(str);他にも、ある数値を0で割ったりしたときにも実行時のエラーが発生する。実行時のエラーは例外処理で適切に処理を行う必要がある。例外の対応プログラムが途中で止まってしまうのは例外が発生したときの処理を書いていないから発生する。例外が発生したときの処理を適切に書いておけばプログラムを正しく終了させることができる。例外発生の有無にかかわらず実行される処理}finallyブロックは省略可能。finallyブロックはファイルの読み書きや通信の処理等に使用されることが多い。System.out.println("a[10]に値を代入します。System.out.println("a[10]に値を代入しました。System.out.println("配列の要素を越えています。System.out.println("この処理は必ず実行されます。System.out.println("処理が終了しました。}}出力結果は下記の通り。a[10]に値を代入します。配列の要素を越えています。この処理は必ず実行されます。例外クラス例外は例外のクラスから生成されたインスタンスであり、例外の種類に応じてクラスが異なる。例外クラスとそのインスタンスが提供するメソッドを使うことで例外の詳しい情報を取得することができる。例外クラスが代入される変数(慣例的に「e」を使うことが多い)}tryブロック内の処理を実行中、catchで指定したクラスの例外が発生すると例外の種類に応じたcatchブロックに遷移する。この時に例外クラスのインスタンスが変数「e」に代入される。catchできるのはThrowableクラスのサブクラスの例外のみである。Throwableクラスとサブクラス例外クラスのインスタンスを扱う「System.out.println」の中で例外クラスのインスタンスを出力すると、Objectクラスから継承した「toString()」が呼ばれ、例外の種類(クラス名)がわかる。System.out.println("a[10]に値を代入します。System.out.println("a[10]に80を代入しました。System.out.println("配列の要素を越えています。eに代入されている例外の情報をtoString()で取り出し、出力する。"という例外が発生しました。System.out.println("無事終了しました。}}出力結果は下記の通り。a[10]に値を代入します。配列の要素を越えています。10という例外が発生しました。複数種類の例外処理catch文を複数並べて記述することで、複数種類の例外発生に対応することができる。例外の種類にスーパークラスの例外クラスを指定すると、そのサブクラスの例外クラス全てをcatchすることができる。「Exception」はcatch可能な全ての例外のスーパークラスなので、発生するすべての例外をcatchすることができる。例外を複数並べると、catch文の上から条件判定されるので、Exceptionクラスの下に記述した例外は発生してもExceptionクラスの例外でcatchされてしまうので注意が必要である。「ArrayIndexOutOfBoundsException」「IOException」に該当しない全ての例外をcatchした時の処理を記述}例外の作成と送出Javaに用意されている例外クラスとは別の例外を独自に宣言することができる。宣言した例外は任意のタイミングで送出することができる。この例外を送出するクラスを利用する人に例外処理を強制することができ、何か例外処理を書かないとコンパイルできないエラーに強いプログラムを作成することができる。独自の例外クラスを作成するにはExceptionクラスを継承すればよい。例外に必要なメソッドは、すべてスーパークラスであるExceptionとThrowableクラスから引き継ぐことができる。Exceptionクラスを継承したクラスのインスタンスは「try-catch」でcatchすることができるようになる。Studentクラスのインスタンスを作成、初期idは99999。"をキャッチしました。例外処理をしているため、処理が継続されている。コンストラクタで代入した「99999」を取得している。}}出力結果jpt13.StudentIDOutOfRangeExceptionをキャッチしました。-スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。