天天看點

JDK7 新特性

轉載自:http://www.javalord.com/javalordblog/?p=349

java SE 7規範(又名JDK 7)開發進展很順利,計劃于2011年夏天釋出最終版本。為了讓開發者能夠友善快速地一覽JDK 7中的所有重要元素,Developer.com發表了JDK 7 Reference Card,為開發者提供參考。

JSR203:JDK中會更多的IO API(“NIO.2”)
通路檔案系統

與之前的JDK中通過java.io.File通路檔案的方式不同,JDK7将通過java.nio.file包中的類完成。JDK7會使用java.nio.file.Path類來操作任何檔案系統中的檔案。(這裡說的任何檔案系統指的是可以使用任何檔案存儲方式的檔案系統)

示例:

Java7之前

File file = new File(“some_file”);

使用Java7

Path path = Paths.get(“some_file”);

在File類中加入了新的方法toPath(),可以友善的轉換File到Path

Path path = new File(“some_file”).toPath();

Socket通道綁定和配置 在JDK7中面向通道的網絡程式設計也得以更新!JDK7中可以直接綁定通道的socket和直接操作socket屬性。JDK7提供了平台socket屬性和指定實作的socket屬性。
  • JDK7加入了一個新的位元組通道類,SeekableByteChannel
  • NetworkChannel是面向網絡通道程式設計子產品中的又一個新的超接口。利用它可以友善的綁定通道socket,并且友善設定和擷取socket的屬性。
  • MulticastChannel接口友善建立IP協定多點傳播。多點傳播實作直接綁定到本地的多點傳播裝置。
靈活的異步I/O 可以通過真正的異步I/O,在不同的線程中運作數以萬計的流操作!JKD7提供了對檔案和socket的異步操作。一些JDK7中的新通道:
  • AsynchronousFileChannel:異步檔案通道可以完成對檔案的異步讀寫操作。
  • AsynchronouseSocketChannel:Socket中的一個簡單異步通道,方法是異步的并且支援逾時。
  • AsynchronousServerSocketChannel:異步的ServerSocket
  • AsynchronousDatagramChannel:基于資料包的異步socket
JSR292:Java平台中的動态程式設計語言
Da Vinci Machine項目(JSR292)的主旨是擴充JVM支援除Java以外的其它程式設計語言,尤其是對動态程式設計語言的支援。所支援的語言必須和Java一樣不收到歧視并共同存在。
JSR334:Java語言的一些改進
OpenJDK項目的創造(JSR334)的主旨是對Java語言進行一些小的改進來提高每天的Java開發人員的工作。這些改進包括:
  • Switch語句允許使用String類型
  • 支援二進制常量和數字常量中可以使用下劃線
  • 使用一個catch語言來處理多種異常類型
  • 對通用類型執行個體的建立提供類型推理
  • Try-with-resources語句來自動關閉資源
JSR119:Java編譯器API
JSR199是在JDK6中加入的,主要用來提供調用Java編譯器的API。除了提供javac的指令行工具,JSR199提供Java編譯器到程式互動的能力。Java編譯器API要達到三個目标:
  • 對編譯器和其它工具的調用
  • 對結構化的編譯資訊進行通路
  • 對檔案輸入輸出定制化處理的能力
JSR206:Java XML處理的API (JAXP)

JSR206即Java API for XML Processing(JAXP),是Java處理XML文檔的一個與實作無關,靈活的API。

JAXP1.3的主要特性包括:

  • DOM3
  • 内建通過XML Schema進行文檔校驗的處理器
  • 對XML Schema中的資料類型的實作,在javax.xml.datatype包中。
  • XSLTC,最快的轉換器,也是XSLT進行中的預設引擎。
  • 提供對XInclude的實作。這将會友善我們使用文本和其它已有的XML來建立新的文檔,這樣可以對文檔片段進行重用。
  • JDK7中會包含JAXP1.3,這個是JAXP的最新實作。
綁定技術(JAXB)

JSR222即Java Architecture for XML Binding(JAXB)。JAXB的目的是便于Java程式進行Java類到XML文檔的映射。

JAXB2的主要特性:

  • 支援全部的W3C XML Schema特性。(JAXB1.0說明了對于W3C XML Schema中某些特性的不支援)
  • 支援綁定Java到XML文檔,通過添加javax.xml.bind.annotation包來控制綁定。
  • 大量減少了對于schema衍生出來的類。
  • 通過JAXP1.3的校驗API來提供額外的校驗能力。
  • JDK7中将包括JAXB2.2
JSR224:基于XML的Web服務API(JAX-WS)

JSR224即Java API for XML-based Web Services(JAX-WS),是一個基于Annotation标注的程式設計模型,主要針對Web Service應用和用戶端開發。

JAX-WS2的主要特性包括:

  • 對JAXB2.1 API的支援(JSR222)
  • 對Web Services Addressing 1.0的支援
  • EndpointReference(EPR)的API:建立(BindingProvider.getEndpointReference(),Endpoint.getEndpointReference(),MessageContext.getEndpointReference())
事務處理(使用JAXB2.1綁定W3C EPR到W3CEndpointReference類,使用JAXB Marshall/Unmarshall W3CendpointReference類)
  • 提供友好的API來啟用和停止某些特性,例如MTOM特性和Addressing特性
  • JDK7将包含JAX-WS2.2
可插拔的Annotation處理API
JSR269即Pluggable Annotation-Processing API
  • 從JDK5開始,Annotation标注就成了強大的機制用來标注我們的類、屬性和方法。通常Annotation标注是在建立階段或者運作階段進行處理的,并擷取語義結果。JSR269主要用來定義一套API,允許通過可插拔的API來進行标注處理器的建立。
  • 規範包括一部分的API用來對Java程式設計語言進行建構,還有就對标注處理器聲明和控制運作的部分。
  • 有了程式中的Annotation标注,就需要有标注處理器架構來反射程式的結構。
  • Annotation處理器會指定他們處理的标注并且更多的處理器可以合作運作。
  • 标注處理器和程式結構的API可以在建構階段通路。
小的改進
java.util.Objects 提供了一套9個靜态方法。其中兩個方法用來檢測目前對象是null還是非null。兩個方法用來提供生成toString()字元串同時支援null對象。兩個用來處理hash的方法。兩個方法用來處理equals。最後一個compare方法用來進行比較。
Swing JLayer元件 JXLayer是一個元件裝飾器,提供了用來裝飾多個組合元件的方式,并且可以捕獲所有滑鼠、鍵盤和FocusEvent的事件,并針對所有的XLayer子元件。這個元件隻會對public swing的api起作用,對全局設定沒有作用,例如對EventQueue或者RepaintManager。(除了這些,Swing還将在JDK7中提供JXDatePicker和CSS方式樣式)
并發和集合API JSR166,并發和集合API提供了靈活的異步處理,并發HashMap,傳輸隊列和輕量級的fork/join架構以及本地線程方式的僞随機數生成器。
類加載器體系結構 類加載器已經更新到了可以在無等級類加載器拓撲中避免死鎖。JDK7中包含了一個對于多線程自定義類加載器的增強實作,名字為具有并行能力的類加載器。使用平行能力的類加載器加載class,會同步到類加載器和類名。
Locale類的改進 Java Locale避免由于小的變化導緻資料丢失。除此,Locale應該提供更多的特性,例如IETF BCP 47和UTR 35(CLDR/LDML)。
分離使用者Locale和使用者接口Locale JDK7分離了UI語言的locale和格式化locale,這個已經在Vista之後的windows系統中實作了。
嚴格的類檔案檢測 通過JavaSE6的規範,version51(SE7)的類檔案和之後的版本必須通過類型檢測來檢驗。對于老的推理驗證VM不可以宕掉

Elliptic-Curve

Cryptography (ECC)橢圓曲線加密

從JDK7開始,Java提供對标準的ECC算法的靈活實作(基于橢圓曲線的公鑰加密算法)
Swing中的Nimbus外觀 Nimbus是JDS(Java Desktop System)中的新外觀。這個也是Solaris11的GTK主題
Java2D中的XRender Pipeline JDK7中加入了基于X11 XRender擴充的Java2D圖形管道。這将提供更多的對于目前先進的GPUs通路的功能。
TLS1.2 TLS (Transport Layer Security)是一個用在Internet上的資料傳輸安全協定,用來避免監聽、引誘和消息僞造。TLS的主要目的是提供兩個應用間通信的隐私和資料完整。TLS是RFC5246标準,在JDK7中提供1.2
JDBC4.0/4.1 JDBC4.1特性隻在JDK7或者更高版本中存在。JDBC4.1隻是對JDBC4.0進行較小的改動。關于一些JDBC4.0/4.1的特性:
  • 資料源—Derby包括了對于javax.sql.DataSource的新的實作
  • JDBC驅動自動加載—應用不必在通過Class.forName()方法來加載資料庫驅動了。取而代之的是DriverManager會根據應用請求連接配接的情況,自動查找到合适的JDBC驅動。
  • 包裝—這是JDBC4.0中的新的概念,主要是通過這種機制可以讓應用擷取的廠商提供的标準JDBC對象實作,例如Connections,Statements和ResultSets。
  • Statement事件—連接配接池可以監聽Statement的關閉和錯誤時間。addStatementEventListener和removeStatementEventListener被加入到了javax.sql.PooledConnection
  • JDK7提供了JDBC4.1全部的支援
透明窗體和異形窗體 為了6u10版本的圖形處理,JDK提供了透明效果的支援(簡單透明和像素透明)并且提供了對于異形窗體的支援(可以将窗體設定成任意形狀),輕重混合并且增強了AWT安全警告。透明效果和異形窗體是通過com.sun.awt.AWTUtilities類實作的。
Unicode6.0

Unicode6.0提供了諸如2.088字元集、對已經存在字元集的屬性改進、格式化改進以及新的屬性和資料檔案。

JDK7已經更新到對Unicode6.0的支援。

要來關閉URLClassLoader的方法

對JMX代理和MBeans的改進

通過URLClassLoader,應用可以通過URL搜尋路徑來加載類和資源。JKD7提供了close()新方法來幫助URLClassLoader清理資源。

這個改進來至于JRockit,可以友善連接配接平台。MBean伺服器可以通過防火牆提供一套MBeans,這些暴露了VM中的一些内部操作的資訊

新的垃圾回收器 JDK7提供了新的垃圾回收器,針對目前的CMS垃圾回收器,這将會讓垃圾回收器有更少的停頓時間和更高的語言效果。
改進的JSR
JSR901:Java Language Specification(JLS)Java語言計劃
  • JSR901包括了從第一版Java規範到現在為止的所有的變化、說明和補充。Java語言通過JLS規範。
  • 對于JLS的改變通過JSR901進行管理
  • JDK7将會包括最新的JSR901
JSR924:JVM平台規範
  • JSR924目的是維護Java虛拟機規範的變化,其中第二版是為了J2SE1.5的。
Java SE API
  • JavaSE APIs保持着對例行維護和小範圍改進的加入計劃的記錄
延期到JDK8或者之後的規範
  • JSR294:Java語言和虛拟機對子產品程式設計技術的支援—目前JSR主要的目的是提供在編譯期和運作期的子產品程式設計支援
  • JSR308:對于Java類型的Annotation注釋—這将是對于目前注釋符号系統的擴充,将允許我們在類型中出現注釋符号。
  • JSR296:Swing應用架構—主旨是消除Swing程式設計中的模闆代碼并且提供Swing程式更加簡單的結構。
  • 子產品化—提供一個明确的、簡單的、低級别的子產品系統,主要目的是将JDK子產品化。
  • JSR TBD:Lambda項目—Lambda表達式(通俗的也稱為“閉包“)和對Java程式設計語言的保護方法
  • JSR TBD:對于集合支援的語言—常量表達式對于lists、sets和maps的疊代以及通過索引符号對lists和maps的通路。
  • Swing JDatePicker元件—添加SwingLabs JXDatePicker元件到平台。

JDK7手冊參考卡片英文原版下載下傳:http://www.javalord.com/download/7721_JDK7RefCard.pdf

JDK7手冊參考卡片中文翻譯下載下傳:http://www.javalord.com/download/JDK7 Ref Card_cn.pdf