Javaコラム Javaエンジニアのためのお役立ちコラム

Java

Java例外処理とは?例外処理の書き方も紹介!

2020年07月27日
SE
Javaのtry-catch文はどのようなときに使うのですか。

PM
Javaのtry-catch文は例外処理のときに使用します。

例外処理とは?

プログラム実行中に発生するエラーに対処するために、Javaには例外処理という機能があります。この記事ではtry-catch文の使い方を中心に、例外処理の基本的な書き方を、コード例を示しながら説明していきます。

Javaのtry-catch構文

Javaのtry-catch文では、try節に実行したい処理を記述し、そこで発生する例外への対処方法をcatch節に記述します。書き方は次のようになります。

複数種類の例外が起こる可能性がある場合の書き方は、例外クラス毎にcatch節で異なる処理の記述が可能です。

try節やcatch節の後に実行する、finally節を最後に記述できます。ここには、例外発生の有無にかかわらず実行したい終了処理を記述します。finally節の書き方は次のようになります。

try-catch文の流れをコード例で確認しよう

コマンドラインで指定した整数xを読み込み、”1000/x”の除算を実行するJavaプログラムを例に、例外処理を説明します。

例外が発生するコードの例

例外が発生する可能性のあるJavaプログラムの例です。例外処理は記述していません。

正常実行の例として、xに20を指定した場合の出力を示します。

上のJavaプログラムで実行時に発生するエラーには、引数が読み込めない、読み込んだ値が整数でない、xが0でゼロ除算になるという可能性があります。
例えば、引数0を指定した場合には、次の実行時にエラーメッセージが出力され、プログラムは途中で中断されます。

try-catchを使ったコード例

Sample01にtry-catch構文を適用したJavaコードの書き方の例を、Sample02に示します。3種類の例外に対応するcatch節を記述しました。

引数0を指定した場合の実行結果は、次のようになります。コードの流れを確認してみて下さい。

検査例外では例外処理の記述が必須

Javaの例外クラスには、検査例外と非検査例外があります。検査例外では、例外処理の記述をコンパイラがチェックするため、必ず例外処理を書く必要があります。
Sample01の例では、例外処理を記述していませんでしたが、このコードで発生する例外は非検査例外なので、コンパイルは正常終了します。
検査例外の例として、文字ファイルを読み込むためにFileReaderを生成するJavaプログラムを示します。

このコードをコンパイルすると、FileNotFoundExceptionを捕捉する必要があるというエラーがでます。そこでtry-catchを入れる書き方で、次のように修正します。

メソッドを跨ぐ例外処理の書き方

例外が発生したときにメソッド内ではなく、それを呼び出した親メソッド内で処理する方が都合の良い場合もあります。そこで、メソッドを跨ぐ例外処理の書き方を説明します。
上記のSample05で、FileReaderを取得する処理をメソッドに抜き出すとします。myFileReaderというメソッドに置き換えたJavaコードの書き方の例を、Sample06に示します。

ここで、myFileReaderメソッド内にはtry-catch文がありません。コンパイルエラーを避けるため、「例外は親メソッドに投げます」ということを宣言しているのが、「throws 例外クラス」の記述です。
test.txtというファイルがない状態で実行されると、出力は下記のようになり、main内のcatch節を実行していることがわかります。

SE
Javaの例外クラスには検査例外と非検査例外があるのですね。

PM
その通りです。検査例外では例外処理の記述をコンパイラがチェックするため、必ず例外処理を書くようにしましょう。

例外処理の基本を理解しましょう

Javaの例外処理の基本として、try-catch文の使い方を中心にコードの書き方を説明しました。try節の実行中に例外が発生すると、catch節を実行し、例外の処理をします。例外が発生したときにどんな処理が必要かを考えながら、書き方を工夫してみて下さい。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags