LoginSignup
2
1

More than 5 years have passed since last update.

Java7について調べたこと

Posted at

概要

「1.4」で止まってたJavaの知識をバージョンアップするため
Java7,8,9について学習しています。
今回は「7」で追加された機能について調べた事のみを記載します。

調べたこと

ダイヤモンド演算子

インスタンス生成時にジェネリクスを省略できるようになりました。

List<Map<String, List<String>>> gyunyu = new ArrayList<>();

NIO2

ファイルシステム関連のAPIが追加されました。

ファイルの読み込み

try {
  Path path = Paths.get("gyunyu.txt");
  List<String> list = Files.readAllLines(path, Charset.forName("UTF-8"));

  for (String gyunyu : list) {
    System.out.println(gyunyu);
  }
} catch(IOException e) {
  e.printStackTrace();
}

ファイルの書き込み

try {
  List<String> list = new ArrayList<>();
  list.add("レモン牛乳");

  Path path = Paths.get("gyunyu.txt");
  Files.write(path, list, Charset.forName("UTF-8"), StandardOpenOption.APPEND);
} catch (IOException e) {
  e.printStackTrace();
}
  • java.nio.file.Path
    インタフェース。ファイルまたはディレクトリのパスを特定するために使用できるオブジェクト

  • java.nio.file.Paths
    Pathオブジェクトを生成するためのクラス

    • Paths.get(URI uri) : 指定された URI を Path オブジェクトに変換
  • java.nio.file.Files
    ファイルまたはディレクトリに関する処理を集めたクラス

    • Files.readAllLines(Path path, Charset cs) : ファイルからすべての行を読み取る
    • Files.write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options) : テキスト行をファイルに書き込む
  • java.nio.file.StandardOpenOption
    ファイルの操作方法が定義されている列挙型のクラス

    • StandardOpenOption.APPEND : ファイルの先頭ではなく最後に書き込む

try-with-resources

try-with-resources文を使う事で、ファイル・データベースへのアクセスで記述していたclose()を書かなくて良くなりました。
記述し忘れによるメモリリーク防止、ちょっとだけ手間が省けるようになりました。

try(BufferedReader reader = new BufferedReader(new FileReader("gyunyu.txt"))) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

java.lang.AutoCloseablejava.io.Closeableインターフェースを実装するクラスであれば、try-with-resources文が使えます。

Gyunyu.java
public class Gyunyu implements AutoCloseable {
  public void make() {
    System.out.println("コーヒー");
  } 
  @Override
  public void close() throws Exception {
    System.out.println("牛乳 !!!");
  }
}
try (Gyunyu gyunyu = new Gyunyu()) {
  gyunyu.make();
} catch (Exception e) {
  e.printStackTrace();
}

Clipboard02.png

gyunyu.close()のように呼び出さなくてもclose()が実行されています。

複数の例外をcatch

Java6までは下記のように書いていましたが、

try {   
} catch (IllegalArgumentException e) {      
} catch (NullPointerException e) {
}

Java7からは下記のようにまとめて記述する事が出来る。

try {
} catch (IllegalArgumentException | NullPointerException e) {
}

switch文でStringの判定

switch文でStringを使用できるようになりました。
「1.4」まではintだけ、「5」からenumも判定に使用できるようになり、
「7」からStringでも判定できるようになりました。
以前からStringで判定できると思ってた・・・

String s = "coffee";
switch (s) {
  case "ichigo":
    System.out.println("ICHIGO GYUNYU !!!");
    break;
  case "coffee":
    System.out.println("COFFEE GYUNYU !!!");
    break;
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1