【Java入門】try-catch-finallyの使い方

こんにちは!フリーランスの桃太郎です。

Javaにはエラーが発生した際に、適切な処理を行うための構文としてtry-catch-finallyがあります。

この記事では、

・try-catchとは?
・try-catchの使い方

という基本的な内容から、

・finallyの使い方
・finallyの注意点

などの応用的な使い方に関しても解説していきます。

なお、Javaの記事については、こちらにまとめています。

目次

try-catchとは

javaのプログラミングにおいて、エラーは大きく2つの種類に分けられます。

一つは、javaの書き方自体を誤って起こる文法エラー。

そして、もう一つが、実際にプログラムが実行された時に初めて起こる実行時エラーです。

実行時エラーが起こるとプログラムは後続の処理が行われず、突然止まってしまい、そのシステムを利用しているユーザからすると、何が起きたのかわからない状態となります。

そこで、そのような実行時エラーが起きた場合に、適切な処理をプログラムに指示するための構文がtry-catch文となります。

try-catchの使い方

会員登録して利用するシステムにおいて、ユーザがログインする場面を想定します。

その際、プログラム内では、ログインしようとするユーザがすでに会員なのかどうか判断するためにデータベースにアクセスし情報を確認します。

しかしデータベースへのアクセス処理は予期せぬエラーが発生する可能性があります。

そのような時は以下のようにtry-catch文を使用します。

try {
  db.open();
  Member member = db.executeQuery("/*会員情報を取得するSQL*/");   // ここでDBアクセスエラーが発生する可能性がある
  db.close();
} catch (SQLException e) {
  System.out.println("DBアクセスがエラーが発生し、会員情報を正常に取得できませんでした。");
}

try文の中で、正常に処理が行われずDBアクセスエラーが発生した場合、catch文に処理が移動します。

そのcatch文の中にシステムの要件に沿った適切な処理(ここではエラー原因についてメッセージを出力)を実装します。

finallyとは

finallyの使い方

エラーが発生するかしないかに関わらず、確実に行いたい処理が存在する場合があります。

今回の例でいいますと、データベースへ接続するために、データベースへの通信を開始(open)しています。

そして、データが正常に取得できた場合でも、エラーが発生し取得できなかった場合でも、データベースへの通信は閉じる(close)必要があります。

そのような時に使用するのがfinallyです。

次のプログラムでは、tryブロックの処理が正常に行われた場合でも、例外が発生した場合でも、finallyブロックの処理が行われるためクローズ処理が確実に行われます。

try {
  db.open();
  Member member = db.executeQuery("/*会員情報を取得するSQL*/"); 
} catch (SQLException e) {
  System.out.println("DBアクセスがエラーが発生し、会員情報を正常に取得できませんでした。");
} finally {
   db.close();  // クローズ処理
}

finallyの注意点

try-catch-finally文の注意点として、処理の中にreturnを含む場合の処理順序を正しく理解しておく必要があります。

try {
  db.open();
  Member member = db.executeQuery("/*会員情報を取得するSQL*/"); 
} catch (SQLException e) {
  System.out.println("DBアクセスがエラーが発生し、会員情報を正常に取得できませんでした。");
  return top;  // トップ画面に戻る
} finally {
   db.close();  // クローズ処理
   System.out.println("クローズ処理を行いました");
}

エラー発生時の実行結果

DBアクセスがエラーが発生し、会員情報を正常に取得できませんでした。
クローズ処理を行いました
// トップ画面に戻る

catch文にはエラーメッセージ出力後、トップ画面に戻るreturn処理が実装されています。

ですが、finallyが実装されている場合にはfinally内のクローズ処理が先に実行され、その後にcatch内のreturn処理が行われます。

try catch文の使い方総まとめ

この記事では紹介しきれなかったtry catch文のいろいろな使い方を次の記事にまとめているので、ぜひ確認してください!

まとめ

この記事ではtry-catch-finally構文について解説しました。

適切なエラー処理を行いたい場合はtry-catch-finally構文が必須となりますのでぜひ覚えてください。

もし、try-catch-finally構文について忘れてしまったらこの記事を確認してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次