この投稿は 限定共有に設定されています。 投稿者本人及びURLを知っているユーザーのみアクセスすることができます。

アドベントカレンダー2015

  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

お疲れ様です。
入社1年目の田邊です!

現場に出て3ヶ月でまだまだ分からないことだらけですが、
研修では教わらなかった便利な機能をつまみ食いしてまとめてみました!
現在研修中の人や同期あたり、知らない人も多いんじゃないかなぁと思うので
へぇ~って思ったら褒めてください(^^)笑

と、ここまでは前々から考えてたのですが、、まさかの、、
java8の記事の次の日にjava7のこと書きます。すみません。。笑

ということでjava7から使えるようになった機能をいくつか紹介します!!


1.try-with-resources文
ファイルやDBアクセスしたあとのリソース解放を自動的に行ってくれる機能です。

try-with-resources 文は、1 つ以上のリソースを宣言する try 文です。
リソースは、プログラムでの使用が終わったら閉じられなければいけないオブジェクトです。
try-with-resources 文は、文の終わりで各リソースが確実に閉じられるようにします。
java.io.Closeable を実装しているすべてのオブジェクトも含め、
java.lang.AutoCloseable インタフェースを実装しているオブジェクトはリソースとして使用できます。

引用 - ORACLE try-with-resources 文


研修時に教わったリソースの解放の基本的な書き方
FileInputStream in = null;
BufferedInputStream buf = null;
try {
  in = new FileInputStream("file.txt");
  buf = new BufferedInputStream(in);
  // 省略
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (buf != null) {
    try {
      buf.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

上記の場合、finally句の中で自分でclose()を実装しなければならないので、解放のし忘れが起こる可能性があります。

try-with-resources文を使った書き方
try (FileInputStream in = new FileInputStream("test.txt");
    BufferedInputStream buf = new BufferedInputStream(in)) {
  // 省略
} catch (FileNotFoundException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}

このようなリソース付きのtry文を使用する事で自動的にリソースを解放してくれるのです!
複数のインスタンスを生成するときはセミコロンで区切ります。
この書き方だと解放のし忘れは起こりませんね!便利~

ポイントは、FileInputStreamとBufferedInputStreamをそれぞれ変数として宣言していることです。
対象クラスをネストさせてインスタンス生成(カッコの中でnewしてたり!)した場合、
リソースが解放せれないパターンもあるようです。
ぶっちゃけ私にはもうこれ以上詳しく説明できない、、(爆)ので下記のカシコイかたのブログ記事を見てください!
とても分かりやすく説明してあります。

1.「try句で変数として宣言されたインスタンス」が自動リソース解放の対象となる
2.try句でインスタンス生成する際、コンストラクタで例外が発生した場合はcloseメソッドが実行されない

引用 - try-with-resourcesでリソース解放されないパターン


2.複数のExceptionをひとつのcatch句に書く事ができる

この機能、私は知らなかったけど同期のS君は知ってました。ムムムッ
処理が同じ場合、一つのcatch句にまとめてExceptionを書く事ができます。

} catch (IOException|SQLException e) {
  e.printStackTrace();
}

Exceptionを「|」で区切るだけです。簡単に書けますね!

3.String型のswitch文
これも研修中は知らなかったことですが、switch文でStringを比較することもできます!

String teacher = "S";
switch (teacher) {
  case "I":
    System.out.println("Yu!");
    break;
  case "K":
    System.out.println("Jun!");
    break;
  case "M":
    System.out.println("Kana!");
    break;
  case "S":
    System.out.println("Ken!");
    break;
}
//実行結果:Ken!

っと、ここまで研修生向けに、、と思って書いてきましたが、
研修中のeclipse3.7では対応してなくて使えないかもしれないです。。泣
すみません><

まとめ
アドベントカレンダーも後半ですが、先輩方の記事を見ていると知らないことばっかり!
もっともっと勉強しなきゃいけないなぁということを痛感しました。
同期もそれぞれ現場に出て、みんなの知らないこといっぱい学んでいるんだと思います。
今回はjavaについて書きましたが、研修で学んだ基礎だけでなくいろんな書き方があるんですね!
それが便利な場合があったり使えない場合があったり、、、自分から調べないとわからないことも多いです。
これからも積極的に新しいことを勉強していかなきゃ!
ということで、来年も頑張ります^^