はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回は例外処理について説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第19回 例外処理です。
Exceptionクラス
Exceptionクラスはプログラム運用中に発生される例外を扱うためのクラスです。
Exceptionクラスの種類
すべての例外クラスの先祖クラスになるExceptionクラスは大きく二つの種類に分けらます。
①RuntimeExceptionクラス
RuntimeExceptionクラスを継承するクラスは主に致命的な例外ではありません。
RuntimeExceptionクラスを継承する例外は、プログラム作成時に注意して作成すると例外の発生を予防することができます。
②RuntimeException以外のExceptionクラスの子供クラス
RuntimeException以外の例外は致命的な例外なので、必ずtry/catch文で例外処理を行う必要があります。
そのため、javaのコンパイラーはこのような例外が発生する可能性があるソースコードに例外を処理するように強制しています。
〇Exceptionクラスの関係図
例外処理の強制
上記のソースコードのwrite()メソッドはIOExceptionが発生される可能性があります。
なので、Javaのコンパイラーは上記writeメソッドに問題を表示しています。
上記のようにtry/catch文で囲むとコンパイラーが問題を表示しません。
例外処理の階層関係
上記のようにcatchブロックを作成するとIOExceptionはExceptionの子供クラスなので、
IOExceptionもExceptionクラスで扱うことができます。
つまり、writeメソッドで発生される例外はすべて「e1」で処理されるので、e2まで処理が到達することができません。
下記のように修正すると
IOExceptionはe2で処理され、以外の例外はe1で処理されます。
上記のように例外処理は例外クラスの継承関係に合わせて作成しなければなりません。
色んな例外を同時に処理
Java SE 7からは上記のようにするといくつかの例外を一度に処理できます。
自作例外クラス
例外発生
Javaでは強制に例外を発生したい場合、throwキーワードを使って例外を発生することができます。
throwの使い方
throw キーワードを使うと例外が発生されます。
発生された例外について例外処理を行っていないので、java コンパイラーが問題を表示しています。
throws
throwsは例外処理を呼び出し元のメソッドに委任するキーワードです。
サンプル
上記のように例外処理を行うと例外処理は例外が発生されたメソッドでしか処理できません。
つまり、exceptionSampleメソッドのtry/catchを消すとコンパイラーが問題を表示します。
このような例外処理をメソッドの呼び出し元(今回はmainメソッド)で行いたいときには下記のように作成するとできます。
上記のように作成すると例外が発生されるメソッドが呼び出される元で例外処理することができます。
終わりに
今回の記事は以上になります。
次回はファイル入力および出力を学びましょう。
ご覧いただきありがとうございます。
コメント