Finallyは例外処理で重要!

B!

例外処理のfinallyの使い方がわからなかったので調べてみたらプログラム作成時にかなり重要なポイントになる事が分かりました。
今までなんとなく記述していたfinallyを気持ちを込めて記述できるようになるはずです。

例外処理のfinallyは重要なのか

例外処理を記述する時に思い浮かぶのがファイルの読み書き処理やDB接続などが挙げられるので今回はファイルの読み書き処理を基に解説したい。

public static void main (String[] args){
  try{
    FileWriter fr = new FileWriter("読み書きするファイル名" , true);
    //ファイルに書き込み
    fw.write('aiueo');
    //ファイルの書き込み実行
    fw.flush();
    //ファイルを閉じる
    fw.close();
  }
}

1つ目の構文ではtryの中にファイルの定義からファイルの終了までの一連の処理を記述しているのですが、②の処理「ファイルの書き込み実行」のあとに例外が発生してしまうとファイルを閉じることができなくなってしまう。

その結果ファイルを開けなくなったり、ファイル自体が壊れてしまったりする場合が出てきてしまう。

そうならないためにも下記のようにfinallyにファイルを閉じる処理を記述し、絶対にファイルを閉じる処理にしてしまうのが大切。

public static void main (String[] args){
  try{
    FileWriter fr = new FileWriter("読み書きするファイル名" , true);
    //ファイルに書き込み
    fw.write('aiueo');
   //ファイルの書き込み実行
   fw.flush();
  }catch(IOException e){
    e.printStackTrace();
  }finally{
    //ここでファイルを閉じる
    fw.close();
  }
}

この処理だと例外が起ころうが最後は絶対にファイルを閉じるのでファイルの破損などの障害を未然に防ぐことができる。
この処理にしてしまえばミスが減りますね〜〜〜!

注意!
「書き込んだ分は今すぐに書き込め」という命令処理。
これがないとファイルの書き込みをまとめて実行するのでエラーが起きたときに書き込みに失敗する恐れアリ。書き込んだ分はflushで実行していったほうが良いって先輩が言ってた。

裏技的な例外処理

javaに限りますが、閉じなければいけない処理を書く場合下記のような記述ができます。

public static void main(String[] args){
  try(FileWriter fr = new FileWriter("記述したいテキスト名" , true)){
    //ファイルに書き込み
    fw.write('aiueo');
    //ファイルの書き込み実行
    fw.flush();
  }catch(IOException e){
    e.printStackTrace();
  }
}

この記述は「try-with-resources」構文と呼ばれています。
この構文ではtry()の部分に閉じなければいけない処理を記述することでjavaが自動的に閉じてくれます。

try-catch-finallyと比べて記述も少なく例外が起きようが起きまいが絶対に閉じてくれるので、推奨されています。

最新の記事はこちらから