jdk 5 到 jdk 10各個版本的新特性

jdk5 jdk10各個版本的新特性

JDK1.5新特性:

1.自動裝箱與拆箱:

2.枚舉

3.靜態(tài)導入容握,如:import staticjava.lang.System.out

4.可變參數(shù)(Varargs)

5.內(nèi)实鹜馈(Introspector)檩淋,主要用于操作JavaBean中的屬性,通過getXxx/setXxx鳖昌。一般的做法是通過類Introspector來獲取某個對象的BeanInfo信息硅卢,然后通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法渴频,然后我們就可以通過反射機制來調(diào)用這些方法芽丹。

6.泛型(Generic)(包括通配類型/邊界類型等)

7.For-Each循環(huán)

8.注解

9.協(xié)變返回類型:實際返回類型可以是要求的返回類型的一個子類型

JDK1.6新特性:

  1. AWT新增加了兩個類:Desktop和SystemTray,其中前者用來通過系統(tǒng)默認程序來執(zhí)行一個操作卜朗,如使用默認瀏覽器瀏覽指定的URL,用默認郵件客戶端給指定的郵箱發(fā)郵件,用默認應用程序打開或編輯文件(比如,用記事本打開以txt為后綴名的文件),用系統(tǒng)默認的打印機打印文檔等拔第。后者可以用來在系統(tǒng)托盤區(qū)創(chuàng)建一個托盤程序

2.使用JAXB2來實現(xiàn)對象與XML之間的映射咕村,可以將一個Java對象轉變成為XML格式,反之亦然

  1. StAX蚊俺,一種利用拉模式解析(pull-parsing)XML文檔的API懈涛。類似于SAX,也基于事件驅動模型泳猬。之所以將StAX加入到JAXP家族批钠,是因為JDK6中的JAXB2和JAX-WS 2.0中都會用StAX。

4.使用Compiler API得封,動態(tài)編譯Java源文件埋心,如JSP編譯引擎就是動態(tài)的,所以修改后無需重啟服務器忙上。

5.輕量級Http Server API拷呆,據(jù)此可以構建自己的嵌入式HttpServer,它支持Http和Https協(xié)議。

6.插入式注解處理API(PluggableAnnotation Processing API)

7.提供了Console類用以開發(fā)控制臺程序疫粥,位于java.io包中茬斧。據(jù)此可方便與Windows下的cmd或Linux下的Terminal等交互。

8.對腳本語言的支持如: ruby,groovy, javascript

9.Common Annotations手形,原是J2EE 5.0規(guī)范的一部分啥供,現(xiàn)在把它的一部分放到了J2SE 6.0中

10.嵌入式數(shù)據(jù)庫 Derby

JDK1.7 新特性

1.對Java集合(Collections)的增強支持,可直接采用[]库糠、{}的形式存入對象,采用[]的形式按照索引涮毫、鍵值來獲取集合中的對象瞬欧。如:

List<String>list=[“item1”,”item2”];//存

Stringitem=list[0];//直接取

         Set<String>set={“item1”,”item2”,”item3”};//存

         Map<String,Integer> map={“key1”:1,”key2”:2};//存

         Intvalue=map[“key1”];//取

2.在Switch中可用String

3.數(shù)值可加下劃線用作分隔符(編譯時自動被忽略)

4.支持二進制數(shù)字,如:int binary= 0b1001_1001;

5.簡化了可變參數(shù)方法的調(diào)用

6.調(diào)用泛型類的構造方法時罢防,可以省去泛型參數(shù)艘虎,編譯器會自動判斷。

7.Boolean類型反轉咒吐,空指針安全,參與位運算

8.char類型的equals方法: booleanCharacter.equalsIgnoreCase(char ch1, char ch2)

9.安全的加減乘除: Math.safeToInt(longv); Math.safeNegate(int v); Math.safeSubtract(long v1, int v2);Math.safeMultiply(int v1, int v2)……

10 .Map集合支持并發(fā)請求野建,注HashTable是線程安全的,Map是非線程安全的恬叹。但此處更新使得其也支持并發(fā)候生。另外,Map對象可這樣定義:Map map = {name:"xxx",age:18};

JDK1.8新特性

1.接口的默認方法:即接口中可以聲明一個非抽象的方法做為默認的實現(xiàn)绽昼,但只能聲明一個唯鸭,且在方法的返回類型前要加上“default”關鍵字。

  1. Lambda 表達式:是對匿名比較器的簡化硅确,如:
Collections.sort(names,(String a, String b) -> {

       returnb.compareTo(a);

});

對于函數(shù)體只有一行代碼的目溉,你可以去掉大括號{}以及return關鍵字明肮。如:

Collections.sort(names,(String a, String b) -> b.compareTo(a));

或:

Collections.sort(names, (a, b) -> b.compareTo(a));
  1. 函數(shù)式接口:是指僅僅只包含一個抽象方法的接口,要加@FunctionalInterface注解

  2. 使用 :: 關鍵字來傳遞方法或者構造函數(shù)引用

5.多重注解

6.還增加了很多與函數(shù)式接口類似的接口以及與Map相關的API等……

jdk1.9新特性

1缭付、Java 平臺級模塊系統(tǒng)

當啟動一個模塊化應用時柿估, JVM 會驗證是否所有的模塊都能使用,這基于 requires 語句——比脆弱的類路徑邁進了一大步陷猫。模塊允許你更好地強制結構化封裝你的應用并明確依賴官份。

  1. Linking
    當你使用具有顯式依賴關系的模塊和模塊化的 JDK 時,新的可能性出現(xiàn)了烙丛。你的應用程序模塊現(xiàn)在將聲明其對其他應用程序模塊的依賴以及對其所使用的 JDK 模塊的依賴舅巷。為什么不使用這些信息創(chuàng)建一個最小的運行時環(huán)境,其中只包含運行應用程序所需的那些模塊呢河咽? 這可以通過 Java 9 中的新的 jlink 工具實現(xiàn)钠右。你可以創(chuàng)建針對應用程序進行優(yōu)化的最小運行時映像而不需要使用完全加載 JDK 安裝版本。

  2. JShell : 交互式 Java REPL
    許多語言已經(jīng)具有交互式編程環(huán)境忘蟹,Java 現(xiàn)在加入了這個俱樂部飒房。您可以從控制臺啟動 jshell ,并直接啟動輸入和執(zhí)行 Java 代碼媚值。 jshell 的即時反饋使它成為探索 API 和嘗試語言特性的好工具狠毯。

  3. 改進的 Javadoc
    Javadoc 現(xiàn)在支持在 API 文檔中的進行搜索。另外褥芒,Javadoc 的輸出現(xiàn)在符合兼容 HTML5 標準嚼松。此外,你會注意到锰扶,每個 Javadoc 頁面都包含有關 JDK 模塊類或接口來源的信息献酗。

  1. 集合工廠方法
    通常,您希望在代碼中創(chuàng)建一個集合(例如坷牛,List 或 Set )罕偎,并直接用一些元素填充它。 實例化集合京闰,幾個 “add” 調(diào)用颜及,使得代碼重復。 Java 9蹂楣,添加了幾種集合工廠方法:
Set<Integer> ints = Set.of(1,2,3);
List<String> strings = List.of("first","second");

除了更短和更好閱讀之外俏站,這些方法也可以避免您選擇特定的集合實現(xiàn)。 事實上捐迫,從工廠方法返回已放入數(shù)個元素的集合實現(xiàn)是高度優(yōu)化的乾翔。這是可能的,因為它們是不可變的:在創(chuàng)建后,繼續(xù)添加元素到這些集合會導致 “UnsupportedOperationException” 反浓。

  1. 改進的 Stream API
    長期以來萌丈,Stream API 都是 Java 標準庫最好的改進之一。通過這套 API 可以在集合上建立用于轉換的申明管道雷则。在 Java 9 中它會變得更好辆雾。Stream 接口中添加了 4 個新的方法:dropWhile, takeWhile, ofNullable。還有個 iterate 方法的新重載方法月劈,可以讓你提供一個 Predicate (判斷條件)來指定什么時候結束迭代:
IntStream.iterate(1,  i -> i < 100, i -> i + 1).forEach(System.out::println);

第二個參數(shù)是一個 Lambda度迂,它會在當前 IntStream 中的元素到達 100 的時候返回 true。因此這個簡單的示例是向控制臺打印 1 到 99猜揪。

除了對 Stream 本身的擴展惭墓,Optional 和 Stream 之間的結合也得到了改進。現(xiàn)在可以通過 Optional 的新方法 stram 將一個 Optional 對象轉換為一個(可能是空的) Stream 對象:

Stream<Integer> s = Optional.of(1).stream();

在組合復雜的 Stream 管道時而姐,將 Optional 轉換為 Stream 非常有用腊凶。

  1. 私有接口方法
    使用 Java 9,您可以向接口添加私有輔助方法來解決此問題:
public interface MyInterface {
    void normal InterfaceMethod();
    default void interface MethodWithDefault() {  init(); }
    default void anotherDefaultMethod() { init(); }
    private void init() {
         System.out.println("Initializing");
    }
}

如果您使用默認方法開發(fā) API 拴念,那么私有接口方法可能有助于構建其實現(xiàn)钧萍。

  1. HTTP/2
    Java 9 中有新的方式來處理 HTTP 調(diào)用。這個遲到的特性用于代替老舊的 HttpURLConnection API政鼠,并提供對 WebSocket 和 HTTP/2 的支持风瘦。注意:新的 HttpClient API 在 Java 9 中以所謂的孵化器模塊交付。也就是說公般,這套 API 不能保證 100% 完成万搔。不過你可以在 Java 9 中開始使用這套 API:
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder(URI.create("http://www.google.com"))
              .header("User-Agent","Java")
              .GET()
              .build();
HttpResponse<String>  resp = client.send(req, HttpResponse.BodyHandler.asString());
HttpResponse<String>  resp = client.send(req, HttpResponse.BodyHandler.asString());

除了這個簡單的請求/響應模型之外,HttpClient 還提供了新的 API 來處理 HTTP/2 的特性俐载,比如流和服務端推送蟹略。

  1. 多版本兼容 JAR

我們最后要來著重介紹的這個特性對于庫的維護者而言是個特別好的消息。當一個新版本的 Java 出現(xiàn)的時候遏佣,你的庫用戶要花費數(shù)年時間才會切換到這個新的版本。這就意味著庫得去向后兼容你想要支持的最老的 Java 版本 (許多情況下就是 Java 6 或者 7)揽浙。這實際上意味著未來的很長一段時間状婶,你都不能在庫中運用 Java 9 所提供的新特性。幸運的是馅巷,多版本兼容 JAR 功能能讓你創(chuàng)建僅在特定版本的 Java 環(huán)境中運行庫程序時選擇使用的 class 版本:

multirelease.jar
├──
META-INF

└── versions

└── 9

└── multirelease

└── Helper.class
├──
multirelease
├──
Helper.class
└──
Main.class

在上述場景中膛虫, multirelease.jar 可以在 Java 9 中使用, 不過 Helper 這個類使用的不是頂層的 multirelease.Helper 這個 class, 而是處在“META-INF/versions/9”下面的這個。這是特別為 Java 9 準備的 class 版本钓猬,可以運用 Java 9 所提供的特性和庫稍刀。同時,在早期的 Java 諸版本中使用這個 JAR 也是能運行的,因為較老版本的 Java 只會看到頂層的這個 Helper 類账月。

JDK 10

JDK 10 是 Java 10 標準版的部分實現(xiàn)综膀,將于 2018 年 3 月 20 日發(fā)布,改進的關鍵點包括一個本地類型推斷局齿、一個垃圾回收的“干凈”接口剧劝。

Java 平臺首席架構師 Mark Reinhold 近日在郵件列表上表示,按計劃抓歼,JDK 10 將于 2 月 8 日星期四進入候選發(fā)布(Release Candidate)階段讥此。他建議 JDK 10 在該階段采用和 JDK 9 相同的發(fā)布流程,將 Bug 修復分為 P1 - P5 五個不同的級別谣妻。候選階段將重點修復那些能直接影響 JDK 10 能否成功發(fā)行的 P1 級錯誤萄喳,并將那些非關鍵或短期內(nèi)無法解決的 P1 級錯誤推遲處理。此外蹋半,所有 P2 - P5 級的錯誤均留給后續(xù)版本修復他巨。

JDK 10 的十二項新特性已確定,包括:

  • JEP 286: 局部變量的類型推導湃窍。該特性在社區(qū)討論了很久并做了調(diào)查闻蛀,可查看 JEP 286 調(diào)查結果

  • JEP 296: 將 JDK 的多個代碼倉庫合并到一個儲存庫中您市。

  • JEP 304: 垃圾收集器接口觉痛。通過引入一個干凈的垃圾收集器(GC)接口,改善不同垃圾收集器的源碼隔離性茵休。

  • JEP 307: 向 G1 引入并行 Full GC薪棒。

  • JEP 310: 應用類數(shù)據(jù)共享。為改善啟動和占用空間榕莺,在現(xiàn)有的類數(shù)據(jù)共享(“CDS”)功能上再次拓展俐芯,以允許應用類放置在共享存檔中。

  • JEP 312: 線程局部管控钉鸯。允許停止單個線程吧史,而不是只能啟用或停止所有線程。

  • JEP 313: 移除 Native-Header Generation Tool (javah)

  • JEP 314: 額外的 Unicode 語言標簽擴展唠雕。包括:cu (貨幣類型)贸营、fw (每周第一天為星期幾)、rg (區(qū)域覆蓋)岩睁、tz (時區(qū)) 等钞脂。

  • JEP 316: 在備用內(nèi)存設備上分配堆內(nèi)存。允許 HotSpot 虛擬機在備用內(nèi)存設備上分配 Java 對象堆捕儒。

  • JEP 317: 基于 Java 的 JIT 編譯器(試驗版本)冰啃。

  • JEP 319: 根證書。開源 Java SE Root CA 程序中的根證書。

  • JEP 322: 基于時間的版本發(fā)布模式阎毅》俑眨“Feature releases” 版本將包含新特性,“Update releases” 版本僅修復 Bug 净薛。

image

此外汪榔,JDK 11 的頁面已經(jīng)出現(xiàn)了四個 JEP ,包括:動態(tài)類文件常量(JEP 309肃拜,Dynamic Class-File Constants)痴腌、低開銷垃圾收集器 Epsilon(JEP 318)、移除 Java EE 和 CORBA 模塊(JEP 320)燃领,以及 Lambda 參數(shù)的本地變量語法(JEP 323)士聪。JDK 11 計劃于 2018 年 9 月發(fā)布,并有望成為新的 LTS 版本猛蔽。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剥悟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子曼库,更是在濱河造成了極大的恐慌区岗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毁枯,死亡現(xiàn)場離奇詭異慈缔,居然都是意外死亡,警方通過查閱死者的電腦和手機种玛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門藐鹤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赂韵,你說我怎么就攤上這事娱节。” “怎么了祭示?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵肄满,是天一觀的道長。 經(jīng)常有香客問我质涛,道長悄窃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任蹂窖,我火速辦了婚禮,結果婚禮上恩敌,老公的妹妹穿的比我還像新娘瞬测。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布月趟。 她就那樣靜靜地躺著灯蝴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孝宗。 梳的紋絲不亂的頭發(fā)上穷躁,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音因妇,去河邊找鬼问潭。 笑死,一個胖子當著我的面吹牛婚被,可吹牛的內(nèi)容都是我干的狡忙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼址芯,長吁一口氣:“原來是場噩夢啊……” “哼灾茁!你這毒婦竟也來了?” 一聲冷哼從身側響起谷炸,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤北专,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旬陡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓颓,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年季惩,在試婚紗的時候發(fā)現(xiàn)自己被綠了录粱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡画拾,死狀恐怖啥繁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情青抛,我是刑警寧澤旗闽,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蜜另,受9級特大地震影響适室,放射性物質發(fā)生泄漏。R本人自食惡果不足惜举瑰,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一捣辆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧此迅,春花似錦汽畴、人聲如沸旧巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁猩。三九已至,卻和暖如春罢坝,著一層夾襖步出監(jiān)牢的瞬間廓握,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工嘁酿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隙券,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓痹仙,卻偏偏與公主長得像是尔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子开仰,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理拟枚,服務發(fā)現(xiàn),斷路器众弓,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 記錄Java版本的更新歷史恩溅,主要是對以下文章的結合: 《openjdk 文檔》 《Java - JCP、JSR等名...
    天未的博客閱讀 7,428評論 1 9
  • 主題:內(nèi)心強大的人 1.想要成為內(nèi)心強大的人谓娃,首先要清晰什么是內(nèi)心強大脚乡;想要習得美好的品質,先要明白自己目前是什么...
    緹米米閱讀 669評論 0 0
  • 人生 說到底 也就是一段記憶的旅程 如舊物那樣淡然得失 并于某個不知名的時刻 梳理曾經(jīng)過往 排列新的組成 最終收獲...
    jaysonwang閱讀 166評論 0 0
  • 前世的五百次回眸 換得今生的一次擦肩而過滨达, 我用一千次回眸 換得今生在你面前的駐足停留奶稠。 ...
    武成勇閱讀 806評論 0 2