注目記事

【Javaコード入門】例外処理_③finally句

例外の有無に関わらず、処理を実行する – finally句

try {
  tstatements
} catch(exclazz ex) {
  cstatements
} finally {
  fstatements
}
 tstatements:例外が発生する可能性がある処理
 exclazz:例外クラス
 ex:例外クラスを表す変数名
 cstatements:例外が発生した時に実行される処理
 fstatements:例外の有無に関わらず実行される処理

例外が発生したかどうかに関わらず、実行したい処理はfinallyブロックに記述します。
たとえば、以下はfinally句でファイル(FileReaderオブジェクト)を閉じる例です。tryブロックにcloseメソッドを記述してしまうと、途中で例外が発生した場合、closeメソッドが実行されないまま、catchブロックに処理が移ってしまう可能性があります。finallyメソッドにcloseメソッドを記述することで、ファイルの閉じ漏れを防ぐことができます。

ExFinally.java

  1. package com.example.mynavi.exception;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6.  
  7. public class ExFinally {
  8.   public static void main(String[] args) {
  9.     FileReader reader = null;
  10.     try {
  11.       reader = new FileReader("C:/data.txt");
  12.     } catch (FileNotFoundException e) {
  13.       e.printStackTrace();
  14.     } finally {
  15.       try {
  16.         if (reader != null) {
  17.           reader.close();
  18.         }
  19.       } catch (IOException e) {
  20.         e.printStackTrace();
  21.       }
  22.     }
  23.   }
  24. }

 

try-with-resources構文
Java 7では、try-with-resources構文が新たに追加されました。これによって、finally句を利用するよりもシンプルなコードでリソースを解放できます。詳しくは「ストリーム」節を参照してください。

例外処理_目次
例外処理
try…catch命令
finally句
throw命令

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。