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

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

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

この記事では、

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

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

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

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

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構文について忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

侍テック編集部

侍テック編集部