こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- 例外処理の書き方について知りたい方
この記事を読むと
例外処理のプログラムの書き方
が分かります。
この記事を読む前に、こちらの記事を読むことをおすすめします。
[nlink url=”https://kajirinyo.com/java_course_24/”]例外処理の書き方について解説します
例外処理の構文 基本パターン
try {
実行プログラム
} catch(例外クラス名 変数名){
例外発生時の実行プログラム
}
tryブロック内に書かれたプログラムはJVMによって監視されます。
例外が発生した場合にはcatchに書かれたプログラムが実行されます。
例外クラス名とは
構文に記述する[例外クラス名]には
- Error系例外クラス
- Exception系例外クラス
- RuntimeException系例外クラス
を記述します。
これらのクラスはスーパークラスです。
この中で重要なException系クラスについて説明します。
Exception系クラス
Exception系例外は必ずtry catch文を記述する必要があります。
Exception系例外クラスはサブクラスが用意されています。
- IOExceptionクラス ファイル操作が失敗した時に使用する
- ConnectExceptionクラス ネットワーク接続が失敗した時に使用する
これらのクラスはcatchのカッコ内のクラス名に指定します。
catch(IOException e){}
などのように記述します。
変数名は任意で付けることができますが、
eやexなどがよく使用されます。
例外が発生した場合、例外の詳細情報が変数eに代入されます。
catch文の中で、この変数eを使用して
詳細情報を表示するメソッドを使用することができます。
詳細情報を表示するメソッドは下記の通りです。
- String getMessage()
- void printStackTrace();
getMessage()メソッドはエラーメッセージを取得します。戻り値はStringです。
printStackTrace()メソッドはスタックトレースの内容を画面に出力します。
スタックトレースはプログラムの実行された順序を表示します。
実行時エラーが発生した時に表示されるエラー画面のことです。
finallyを使用する
例外処理が発生した場合はcatchブロックに記述されているプログラムが実行されますが、
finallyを使用することで、
例外処理が発生しても発生しなくても必ず実行されるプログラムを記述することができます。
例えば、cacheに指定したクラスがIOExceptionで
発生したエラーがIOException以外のクラスである場合、
catchは実行されずにプログラムが終了してしまいます。
プログラムで「ファイルを開く処理」や「ネットワーク接続処理」を行った場合は、
「ファイルを閉じる処理」と「ネットワーク切断処理」は必ず行う必要があります。
そのため、finallyを使用して成功しても失敗しても
必ず行わなければならない処理を記述する必要があります。
try {
実行プログラム
} catch(例外クラス名 変数名){
例外発生時の実行プログラム
} finally{
成功しても失敗しても必ず行わなければならない処理
}
ファイルをクローズするときもtry cache文を使用する
ファイルをクローズする時も失敗する可能性があるので
try cache文を記述します。