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年末?)