1 對(duì)集合類的(de)語言支持
Java将包含對(duì)創建集合類的(de)第一類語言支持。這(zhè)意味著(zhe)集合類的(de)創建可(kě)以像Ruby和(hé)Perl那樣了(le)。
原本需要這(zhè)樣:
List list = new ArrayList();
list.add("item");
String item = list.get(0);
Set set = new HashSet();
set.add("item");
Map map = new HashMap();
map.put("key", 1);
int value = map.get("key");
現在你可(kě)以這(zhè)樣:
List list = ["item"];
String item = list[0];
Set set = {"item"};
Map map = {"key" : 1};
int value = map["key"];
這(zhè)些集合是不可(kě)變的(de)。
2 自動資源管理(lǐ)
Java中某些資源是需要手動關閉的(de),如InputStream,Writes,Sockets,Sql classes等。這(zhè)個(gè)新的(de)語言特性允許try語句本身申請更多(duō)的(de)資源,
這(zhè)些資源作用(yòng)于try代碼塊,并自動關閉。
這(zhè)個(gè):
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
變成了(le)這(zhè)個(gè):
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
你可(kě)以定義關閉多(duō)個(gè)資源:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
爲了(le)支持這(zhè)個(gè)行爲,所有可(kě)關閉的(de)類将被修改爲可(kě)以實現一個(gè)Closable(可(kě)關閉的(de))接口。
3 增強的(de)對(duì)通(tōng)用(yòng)實例創建(diamond)的(de)類型推斷
類型推斷是一個(gè)特殊的(de)煩惱,下(xià)面的(de)代碼:
Map> anagrams = new HashMap>();
通(tōng)過類型推斷後變成:
Map> anagrams = new HashMap<>();
這(zhè)個(gè)<>被叫做(zuò)diamond(鑽石)運算(suàn)符,這(zhè)個(gè)運算(suàn)符從引用(yòng)的(de)聲明(míng)中推斷類型。
4 數字字面量下(xià)劃線支持
很長(cháng)的(de)數字可(kě)讀性不好,在Java 7中可(kě)以使用(yòng)下(xià)劃線分(fēn)隔長(cháng)int以及long了(le),如:
int one_million = 1_000_000;
運算(suàn)時(shí)先去除下(xià)劃線,如:1_1 * 10 = 110,120 ? 1_0 = 110
5 switch中使用(yòng)string
以前你在switch中隻能使用(yòng)number或enum。現在你可(kě)以使用(yòng)string了(le):
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
6 二進制字面量
由于繼承C語言,Java代碼在傳統上迫使程序員(yuán)隻能使用(yòng)十進制,八進制或十六進制來(lái)表示數(numbers)。
由于很少的(de)域是以bit導向的(de),這(zhè)種限制可(kě)能導緻錯誤。你現在可(kě)以使用(yòng)0b前綴創建二進制字面量:
int binary = 0b1001_1001;
現在,你可(kě)以使用(yòng)二進制字面量這(zhè)種表示方式,并且使用(yòng)非常簡短的(de)代碼,可(kě)将二進制字符轉換爲數據類型,如在byte或short。
byte aByte = (byte)0b001;
short aShort = (short)0b010;
7 簡化(huà)的(de)可(kě)變參數調用(yòng)
當程序員(yuán)試圖使用(yòng)一個(gè)不可(kě)具體化(huà)的(de)可(kě)變參數并調用(yòng)一個(gè)*varargs* (可(kě)變)方法時(shí),編輯器會生成一個(gè)“非安全操作”的(de)警告。
JDK 7将警告從call轉移到了(le)方法聲明(míng)(methord declaration)的(de)過程中。這(zhè)樣API設計者就可(kě)以使用(yòng)vararg,因爲警告的(de)數量大(dà)大(dà)減少了(le)。
8、其它更新
JDK7中會包含JAXP1.3、JAXB2.2、JAX-WS2.2等。
小的(de)改進java.util.Objects,提供了(le)一套9個(gè)靜态方法。其中兩個(gè)方法用(yòng)來(lái)檢測當前對(duì)象是null還(hái)是非null。兩個(gè)方法用(yòng)來(lái)提供生成toString()字符串同時(shí)支持null對(duì)象。兩個(gè)用(yòng)來(lái)處理(lǐ)hash的(de)方法。兩個(gè)方法用(yòng)來(lái)處理(lǐ)equals。最後一個(gè)compare方法用(yòng)來(lái)進行比較。
Swing JLayer組件JXLayer是一個(gè)組件裝飾器,提供了(le)用(yòng)來(lái)裝飾多(duō)個(gè)組合組件的(de)方式,并且可(kě)以捕獲所有鼠标、鍵盤和(hé)FocusEvent的(de)事件,并針對(duì)所有的(de)XLayer子組件。這(zhè)個(gè)組件隻會對(duì)public swing的(de)api起作用(yòng),對(duì)全局設置沒有作用(yòng),例如對(duì)EventQueue或者RepaintManager。(除了(le)這(zhè)些,Swing還(hái)将在JDK7中提供JXDatePicker和(hé)CSS方式樣式)
并發和(hé)集合API,JSR166,并發和(hé)集合API提供了(le)靈活的(de)異步處理(lǐ),并發HashMap,傳輸隊列和(hé)輕量級的(de)fork/join框架以及本地線程方式的(de)僞随機數生成器。
類加載器體系結構,類加載器已經升級到了(le)可(kě)以在無等級類加載器拓撲中避免死鎖。JDK7中包含了(le)一個(gè)對(duì)于多(duō)線程自定義類加載器的(de)增強實現,名字爲具有并行能力的(de)類加載器。使用(yòng)平行能力的(de)類加載器加載class,會同步到類加載器和(hé)類名。
Locale類的(de)改進,Java Locale避免由于小的(de)變化(huà)導緻數據丢失。除此,Locale應該提供更多(duō)的(de)特性,例如IETF BCP 47和(hé)UTR 35(CLDR/LDML)。
分(fēn)離用(yòng)戶Locale和(hé)用(yòng)戶接口Locale,JDK7分(fēn)離了(le)UI語言的(de)locale和(hé)格式化(huà)locale,這(zhè)個(gè)已經在Vista之後的(de)windows系統中實現了(le)。
嚴格的(de)類文件檢測,通(tōng)過JavaSE6的(de)規範,version51(SE7)的(de)類文件和(hé)之後的(de)版本必須通(tōng)過類型檢測來(lái)檢驗。對(duì)于老的(de)推理(lǐ)驗證VM不可(kě)以宕掉。
Elliptic-CurveCryptography (ECC)橢圓曲線加密,從JDK7開始,Java提供對(duì)标準的(de)ECC算(suàn)法的(de)靈活實現(基于橢圓曲線的(de)公鑰加密算(suàn)法)。
Swing中的(de)Nimbus外觀,Nimbus是JDS(Java Desktop System)中的(de)新外觀。這(zhè)個(gè)也(yě)是Solaris11的(de)GTK主題。
Java2D中的(de)XRender Pipeline,JDK7中加入了(le)基于X11 XRender擴展的(de)Java2D圖形管道。這(zhè)将提供更多(duō)的(de)對(duì)于當前先進的(de)GPUs訪問的(de)功能。
TLS1.2,TLS (Transport Layer Security)是一個(gè)用(yòng)在Internet上的(de)數據傳輸安全協議(yì),用(yòng)來(lái)避免監聽(tīng)、引誘和(hé)消息僞造。TLS的(de)主要目的(de)是提供兩個(gè)應用(yòng)間通(tōng)信的(de)隐私和(hé)數據完整。TLS是RFC5246标準,在JDK7中提供TLS1.2。
JDBC4.0/4.1,JDBC4.1特性隻在JDK7或者更高(gāo)版本中存在。JDBC4.1隻是對(duì)JDBC4.0進行較小的(de)改動。關于一些JDBC4.0/4.1的(de)特性:
- 數據源—Derby包括了(le)對(duì)于javax.sql.DataSource的(de)新的(de)實現
- JDBC驅動自動加載—應用(yòng)不必在通(tōng)過Class.forName()方法來(lái)加載數據庫驅動了(le)。取而代之的(de)是DriverManager會根據應用(yòng)請求連接的(de)情況,自動查找到合适的(de)JDBC驅動。
- 包裝—這(zhè)是JDBC4.0中的(de)新的(de)概念,主要是通(tōng)過這(zhè)種機制可(kě)以讓應用(yòng)獲取的(de)廠商提供的(de)标準JDBC對(duì)象實現,例如Connections,Statements和(hé)ResultSets。
- Statement事件—連接池可(kě)以監聽(tīng)Statement的(de)關閉和(hé)錯誤時(shí)間。addStatementEventListener和(hé)removeStatementEventListener被加入到了(le)javax.sql.PooledConnection。
- JDK7提供了(le)JDBC4.1全部的(de)支持。
|