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

trycatch

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

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

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

湯浅 桃太郎

湯浅 桃太郎

20代は役者、30代はエンジニア、そして40代を迎えた現在、Webライターとして活動しながら、3人の息子たちの家庭教育、アンチエイジングなどにも力を入れて日々ノマドライフを楽しんでいます。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説