なみひらブログ

学んだことを日々記録する。~ since 2012/06/24 ~

Java SE 7 ( JDK7 )言語仕様

ソフトウェアが時代とともに、バージョンアップしていくように、

プログラミング言語もバージョンアップしていきます。

機能拡張はもちろん、プログラミング言語のバグが修正されます。

プログラミング言語にバグがあるなんて、プログラムを勉強してから知りました。。。)

 

さて、プログラミング言語Javaにおいては2011年07月28日に

Java SE 7 ( JDK7 )

が正式リリースされました。※1

Java SE 6リリースから5年ぶりのリリースとなる Java SE 7ですが、

特に大きな機能拡張はなく、開発生産性の向上やライブラリのアップデート等が多いようです。

 

そこで今回は、具体的に「Java SE 7ではこういう書き方ができる!」というのを

挙げておきます。

 

 

/***** switch文でString型が扱える *****/

// JDK6まではswitch文の条件に文字列が使えないので、if文が強制されます。。。

String color = "red";

String colorRGB;

if (color.equals("balck")) {

    colorRGB = "000000";

} else if (color.equals("red")) {

    colorRGB = "ff0000";

} else if (color.equals("blue")) {

    colorRGB = "0000ff";

} else {

    colorRGB = "invalid color";

}

      

// JDK7ではこう書ける!

String color = "red";

String colorRGB;

switch (color) {

    case "black":

        colorRGB = "000000";

        break;

    case "red":

        colorRGB = "ff0000";

        break;

    case "blue":

        colorRBG = "0000ff";

        break;

    default:

        colorRGB = "invalid color";

        break;

}

 

 

/*** ビット数字を表現できる  *****/

// 「0b」と頭に書くことで、ビットで数字を表せます。以下は全部「17」です。

int decFormat = 17;           //10進数

int octFormat = 021;          //8進数

int hexFormat = 0x11;       //16進数

int binFormat = 0b10001; //ビット数字(JDK7より

 

 

/***** 数字の区切り文字として、"_"が使える *****/

// 「_」を使い、桁数の大きい数字が見やすくなります。

// 注意:先頭と末尾への挿入はダメです。例えば、_000 や 000_ など

int decFormat = 1_000_000;

int binFormat = 0b1_0001;

 

 

/***** 複数の例外を1つのブロックでキャッチできる *****/

// JDK6までは、例外オブジェクトごとに処理を書かなければならない。。。

try {

    throw (new FileNotFoundException("test"));

} catch (FileNotFoundException fnfe) {

    fnfe.printStackTrace();      //←

} catch (IOException ioe) {

    ioe.printStackTrace();        //←どちらもstack traceを表示している。モノ違うが、処理は一緒。。。

}

 

// JDK7ではこう書ける!

try {

    throw (new FileNotFoundException("test"));

} catch (FileNotFoundException | IOException ioe fnfe) {

    fnfe.printStackTrace();

}

 

 

/***** ジェネリックインスタンス宣言が改善された *****/

// JDK6までは、型と実体の両方に明示的に型変数を書かなければならない。。。

HashMap<String, Integer> hashMap = new HashMap<String,  Integer>();

List<String> arrayList = new ArrayList<String>();

 

// JDK7ではこう書ける!実体のほうは型変数を書かなくてよい。

HashMap<String, Integer> hashMap = new HashMap();

List<String> arrayList = new ArrayList();

 

 

/***** リソース関係のtry文が改善された *****/

// JDK6まではこう書きます。

FileInputStream in = null;

try {

    in = new FileInputStream("foo.txt");

        *

        *

        *

} catch (FileNotFoundException ex) {

    ex.printStackTrace();

} finally {

    // foo.txtオープンに成功しても、失敗しても書かなければならない。

    // NullPointerExceptionを起こさないように「if文」を明示的に書かなければならない。

    // 書き忘れなどの人的ミスを引き起こす。

    if (in != null) {       

        in.close();

    }

}

 

// JDK7ではこう書ける!

// try文の中に書けます。foo.txtが開けなかったら、catch文に飛びます。close文は必要なし。

try (FileInputStream in = new FileInputStream("foo.txt")) {

    *

    *

    *

} catch (FileNotFoundException ex) {

    ex.printStackTrace();

}

 

以上です。とりあえずこんな感じです。

間違いあったらごめんなさい(´・ω・`)

 

----------------------------------------------------------

豆知識

※1.Javaの変遷

JDK 1.0 (1996年1月23日)

JDK 1.1 (1997年2月19日)

J2SE 1.2 (1998年12月8日)

J2SE 1.3 (2000年5月8日)

J2SE 1.4 (2002年2月6日)

J2SE 5.0 (2004年9月30日)

Java SE 6 (2006年12月11日)

Java SE 7 (2011年7月28日)

Java SE 8 (2012年末?)