jdk 5 到 jdk 10各个版本的新特性
jdk5 jdk10各個(gè)版本的新特性
JDK1.5新特性:
工程代號(hào)為Tiger(老虎)
自從JDK1.3開始,sun維持一個(gè)習(xí)慣,大約每隔兩年發(fā)布一個(gè)JDK的主版本,以動(dòng)物命名,期間發(fā)布的各個(gè)修正版本都是以昆蟲名稱作為工程名稱。
1.自動(dòng)裝箱與拆箱:
2.枚舉
3.靜態(tài)導(dǎo)入,如:import staticjava.lang.System.out
4.可變參數(shù)(Varargs)
5.內(nèi)省(Introspector),主要用于操作JavaBean中的屬性,通過(guò)getXxx/setXxx。一般的做法是通過(guò)類Introspector來(lái)獲取某個(gè)對(duì)象的BeanInfo信息,然后通過(guò)BeanInfo來(lái)獲取屬性的描述器(PropertyDescriptor),通過(guò)這個(gè)屬性描述器就可以獲取某個(gè)屬性對(duì)應(yīng)的getter/setter方法,然后我們就可以通過(guò)反射機(jī)制來(lái)調(diào)用這些方法。
6.泛型(Generic)(包括通配類型/邊界類型等)
7.For-Each循環(huán)
8.注解
9.協(xié)變返回類型:實(shí)際返回類型可以是要求的返回類型的一個(gè)子類型
JDK1.6新特性:
工程代號(hào)Mustang(野馬)
1.AWT新增加了兩個(gè)類:Desktop和SystemTray,其中前者用來(lái)通過(guò)系統(tǒng)默認(rèn)程序來(lái)執(zhí)行一個(gè)操作,如使用默認(rèn)瀏覽器瀏覽指定的URL,用默認(rèn)郵件客戶端給指定的郵箱發(fā)郵件,用默認(rèn)應(yīng)用程序打開或編輯文件(比如,用記事本打開以txt為后綴名的文件),用系統(tǒng)默認(rèn)的打印機(jī)打印文檔等。后者可以用來(lái)在系統(tǒng)托盤區(qū)創(chuàng)建一個(gè)托盤程序
2.使用JAXB2來(lái)實(shí)現(xiàn)對(duì)象與XML之間的映射,可以將一個(gè)Java對(duì)象轉(zhuǎn)變成為XML格式,反之亦然
3.StAX,一種利用拉模式解析(pull-parsing)XML文檔的API。類似于SAX,也基于事件驅(qū)動(dòng)模型。之所以將StAX加入到JAXP家族,是因?yàn)镴DK6中的JAXB2和JAX-WS 2.0中都會(huì)用StAX。
4.使用Compiler API,動(dòng)態(tài)編譯Java源文件,如JSP編譯引擎就是動(dòng)態(tài)的,所以修改后無(wú)需重啟服務(wù)器。
5.輕量級(jí)Http Server API,據(jù)此可以構(gòu)建自己的嵌入式HttpServer,它支持Http和Https協(xié)議。
6.插入式注解處理API(PluggableAnnotation Processing API)
7.提供了Console類用以開發(fā)控制臺(tái)程序,位于java.io包中。據(jù)此可方便與Windows下的cmd或Linux下的Terminal等交互。
8.對(duì)腳本語(yǔ)言的支持如: ruby,groovy, javascript
9.Common Annotations,原是J2EE 5.0規(guī)范的一部分,現(xiàn)在把它的一部分放到了J2SE 6.0中
10.嵌入式數(shù)據(jù)庫(kù) Derby
JDK1.7 新特性
里程碑版本工程代號(hào)Dolphin(海豚)
1.對(duì)Java集合(Collections)的增強(qiáng)支持,可直接采用[]、{}的形式存入對(duì)象,采用[]的形式按照索引、鍵值來(lái)獲取集合中的對(duì)象。如:
2.在Switch中可用String
3.數(shù)值可加下劃線用作分隔符(編譯時(shí)自動(dòng)被忽略)
4.支持二進(jìn)制數(shù)字,如:int binary= 0b1001_1001;
5.簡(jiǎn)化了可變參數(shù)方法的調(diào)用
6.調(diào)用泛型類的構(gòu)造方法時(shí),可以省去泛型參數(shù),編譯器會(huì)自動(dòng)判斷。
7.Boolean類型反轉(zhuǎn),空指針安全,參與位運(yùn)算
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ā)請(qǐng)求,注HashTable是線程安全的,Map是非線程安全的。但此處更新使得其也支持并發(fā)。另外,Map對(duì)象可這樣定義:Map map = {name:“xxx”,age:18};
JDK1.8新特性
1.接口的默認(rèn)方法:即接口中可以聲明一個(gè)非抽象的方法做為默認(rèn)的實(shí)現(xiàn),但只能聲明一個(gè),且在方法的返回類型前要加上“default”關(guān)鍵字。
2.Lambda 表達(dá)式:是對(duì)匿名比較器的簡(jiǎn)化,如:
Collections.sort(names,(String a, String b) -> {returnb.compareTo(a);});對(duì)于函數(shù)體只有一行代碼的,你可以去掉大括號(hào){}以及return關(guān)鍵字。如:
Collections.sort(names,(String a, String b) -> b.compareTo(a));或:
Collections.sort(names, (a, b) -> b.compareTo(a));3函數(shù)式接口:是指僅僅只包含一個(gè)抽象方法的接口,要加@FunctionalInterface注解
4使用 :: 關(guān)鍵字來(lái)傳遞方法或者構(gòu)造函數(shù)引用
5.多重注解
6.還增加了很多與函數(shù)式接口類似的接口以及與Map相關(guān)的API等……
jdk1.9新特性
1、Java 平臺(tái)級(jí)模塊系統(tǒng)
當(dāng)啟動(dòng)一個(gè)模塊化應(yīng)用時(shí), JVM 會(huì)驗(yàn)證是否所有的模塊都能使用,這基于 requires 語(yǔ)句——比脆弱的類路徑邁進(jìn)了一大步。模塊允許你更好地強(qiáng)制結(jié)構(gòu)化封裝你的應(yīng)用并明確依賴。
2.Linking
當(dāng)你使用具有顯式依賴關(guān)系的模塊和模塊化的 JDK 時(shí),新的可能性出現(xiàn)了。你的應(yīng)用程序模塊現(xiàn)在將聲明其對(duì)其他應(yīng)用程序模塊的依賴以及對(duì)其所使用的 JDK 模塊的依賴。為什么不使用這些信息創(chuàng)建一個(gè)最小的運(yùn)行時(shí)環(huán)境,其中只包含運(yùn)行應(yīng)用程序所需的那些模塊呢? 這可以通過(guò) Java 9 中的新的 jlink 工具實(shí)現(xiàn)。你可以創(chuàng)建針對(duì)應(yīng)用程序進(jìn)行優(yōu)化的最小運(yùn)行時(shí)映像而不需要使用完全加載 JDK 安裝版本。
3.JShell : 交互式 Java REPL
許多語(yǔ)言已經(jīng)具有交互式編程環(huán)境,Java 現(xiàn)在加入了這個(gè)俱樂(lè)部。您可以從控制臺(tái)啟動(dòng) jshell ,并直接啟動(dòng)輸入和執(zhí)行 Java 代碼。 jshell 的即時(shí)反饋使它成為探索 API 和嘗試語(yǔ)言特性的好工具。
4.改進(jìn)的 Javadoc
Javadoc 現(xiàn)在支持在 API 文檔中的進(jìn)行搜索。另外,Javadoc 的輸出現(xiàn)在符合兼容 HTML5 標(biāo)準(zhǔn)。此外,你會(huì)注意到,每個(gè) Javadoc 頁(yè)面都包含有關(guān) JDK 模塊類或接口來(lái)源的信息。
5.集合工廠方法
通常,您希望在代碼中創(chuàng)建一個(gè)集合(例如,List 或 Set ),并直接用一些元素填充它。 實(shí)例化集合,幾個(gè) “add” 調(diào)用,使得代碼重復(fù)。 Java 9,添加了幾種集合工廠方法:
除了更短和更好閱讀之外,這些方法也可以避免您選擇特定的集合實(shí)現(xiàn)。 事實(shí)上,從工廠方法返回已放入數(shù)個(gè)元素的集合實(shí)現(xiàn)是高度優(yōu)化的。這是可能的,因?yàn)樗鼈兪遣豢勺兊?#xff1a;在創(chuàng)建后,繼續(xù)添加元素到這些集合會(huì)導(dǎo)致 “UnsupportedOperationException” 。
6.改進(jìn)的 Stream API
長(zhǎng)期以來(lái),Stream API 都是 Java 標(biāo)準(zhǔn)庫(kù)最好的改進(jìn)之一。通過(guò)這套 API 可以在集合上建立用于轉(zhuǎn)換的申明管道。在 Java 9 中它會(huì)變得更好。Stream 接口中添加了 4 個(gè)新的方法:dropWhile, takeWhile, ofNullable。還有個(gè) iterate 方法的新重載方法,可以讓你提供一個(gè) Predicate (判斷條件)來(lái)指定什么時(shí)候結(jié)束迭代:
第二個(gè)參數(shù)是一個(gè) Lambda,它會(huì)在當(dāng)前 IntStream 中的元素到達(dá) 100 的時(shí)候返回 true。因此這個(gè)簡(jiǎn)單的示例是向控制臺(tái)打印 1 到 99。
除了對(duì) Stream 本身的擴(kuò)展,Optional 和 Stream 之間的結(jié)合也得到了改進(jìn)。現(xiàn)在可以通過(guò) Optional 的新方法 stram 將一個(gè) Optional 對(duì)象轉(zhuǎn)換為一個(gè)(可能是空的) Stream 對(duì)象:
Stream<Integer> s = Optional.of(1).stream();在組合復(fù)雜的 Stream 管道時(shí),將 Optional 轉(zhuǎn)換為 Stream 非常有用。
7.私有接口方法
使用 Java 9,您可以向接口添加私有輔助方法來(lái)解決此問(wèn)題:
8.如果您使用默認(rèn)方法開發(fā) API ,那么私有接口方法可能有助于構(gòu)建其實(shí)現(xiàn)。
HTTP/2
Java 9 中有新的方式來(lái)處理 HTTP 調(diào)用。這個(gè)遲到的特性用于代替老舊的 HttpURLConnection API,并提供對(duì) WebSocket 和 HTTP/2 的支持。注意:新的 HttpClient API 在 Java 9 中以所謂的孵化器模塊交付。也就是說(shuō),這套 API 不能保證 100% 完成。不過(guò)你可以在 Java 9 中開始使用這套 API:
除了這個(gè)簡(jiǎn)單的請(qǐng)求/響應(yīng)模型之外,HttpClient 還提供了新的 API 來(lái)處理 HTTP/2 的特性,比如流和服務(wù)端推送。
9.多版本兼容 JAR
我們最后要來(lái)著重介紹的這個(gè)特性對(duì)于庫(kù)的維護(hù)者而言是個(gè)特別好的消息。當(dāng)一個(gè)新版本的 Java 出現(xiàn)的時(shí)候,你的庫(kù)用戶要花費(fèi)數(shù)年時(shí)間才會(huì)切換到這個(gè)新的版本。這就意味著庫(kù)得去向后兼容你想要支持的最老的 Java 版本 (許多情況下就是 Java 6 或者 7)。這實(shí)際上意味著未來(lái)的很長(zhǎng)一段時(shí)間,你都不能在庫(kù)中運(yùn)用 Java 9 所提供的新特性。幸運(yùn)的是,多版本兼容 JAR 功能能讓你創(chuàng)建僅在特定版本的 Java 環(huán)境中運(yùn)行庫(kù)程序時(shí)選擇使用的 class 版本:
在上述場(chǎng)景中, multirelease.jar 可以在 Java 9 中使用, 不過(guò) Helper 這個(gè)類使用的不是頂層的 multirelease.Helper 這個(gè) class, 而是處在“META-INF/versions/9”下面的這個(gè)。這是特別為 Java 9 準(zhǔn)備的 class 版本,可以運(yùn)用 Java 9 所提供的特性和庫(kù)。同時(shí),在早期的 Java 諸版本中使用這個(gè) JAR 也是能運(yùn)行的,因?yàn)檩^老版本的 Java 只會(huì)看到頂層的這個(gè) Helper 類。
JDK 10
JDK 10 是 Java 10 標(biāo)準(zhǔn)版的部分實(shí)現(xiàn),將于 2018 年 3 月 20 日發(fā)布,改進(jìn)的關(guān)鍵點(diǎn)包括一個(gè)本地類型推斷、一個(gè)垃圾回收的“干凈”接口。
Java 平臺(tái)首席架構(gòu)師 Mark Reinhold 近日在郵件列表上表示,按計(jì)劃,JDK 10 將于 2 月 8 日星期四進(jìn)入候選發(fā)布(Release Candidate)階段。他建議 JDK 10 在該階段采用和 JDK 9 相同的發(fā)布流程,將 Bug 修復(fù)分為 P1 - P5 五個(gè)不同的級(jí)別。候選階段將重點(diǎn)修復(fù)那些能直接影響 JDK 10 能否成功發(fā)行的 P1 級(jí)錯(cuò)誤,并將那些非關(guān)鍵或短期內(nèi)無(wú)法解決的 P1 級(jí)錯(cuò)誤推遲處理。此外,所有 P2 - P5 級(jí)的錯(cuò)誤均留給后續(xù)版本修復(fù)。
JDK 10 的十二項(xiàng)新特性已確定,包括:
JEP 286: 局部變量的類型推導(dǎo)。該特性在社區(qū)討論了很久并做了調(diào)查,可查看 JEP 286 調(diào)查結(jié)果。
JEP 296: 將 JDK 的多個(gè)代碼倉(cāng)庫(kù)合并到一個(gè)儲(chǔ)存庫(kù)中。
JEP 304: 垃圾收集器接口。通過(guò)引入一個(gè)干凈的垃圾收集器(GC)接口,改善不同垃圾收集器的源碼隔離性。
JEP 307: 向 G1 引入并行 Full GC。
JEP 310: 應(yīng)用類數(shù)據(jù)共享。為改善啟動(dòng)和占用空間,在現(xiàn)有的類數(shù)據(jù)共享(“CDS”)功能上再次拓展,以允許應(yīng)用類放置在共享存檔中。
JEP 312: 線程局部管控。允許停止單個(gè)線程,而不是只能啟用或停止所有線程。
JEP 313: 移除 Native-Header Generation Tool (javah)
JEP 314: 額外的 Unicode 語(yǔ)言標(biāo)簽擴(kuò)展。包括:cu (貨幣類型)、fw (每周第一天為星期幾)、rg (區(qū)域覆蓋)、tz (時(shí)區(qū)) 等。
JEP 316: 在備用內(nèi)存設(shè)備上分配堆內(nèi)存。允許 HotSpot 虛擬機(jī)在備用內(nèi)存設(shè)備上分配 Java 對(duì)象堆。
JEP 317: 基于 Java 的 JIT 編譯器(試驗(yàn)版本)。
JEP 319: 根證書。開源 Java SE Root CA 程序中的根證書。
JEP 322: 基于時(shí)間的版本發(fā)布模式?!癋eature releases” 版本將包含新特性,“Update releases” 版本僅修復(fù) Bug 。
此外,JDK 11 的頁(yè)面已經(jīng)出現(xiàn)了四個(gè) JEP ,包括:動(dòng)態(tài)類文件常量(JEP 309,Dynamic Class-File Constants)、低開銷垃圾收集器 Epsilon(JEP 318)、移除 Java EE 和 CORBA 模塊(JEP 320),以及 Lambda 參數(shù)的本地變量語(yǔ)法(JEP 323)。JDK 11 計(jì)劃于 2018 年 9 月發(fā)布,并有望成為新的 LTS 版本。
總結(jié)
以上是生活随笔為你收集整理的jdk 5 到 jdk 10各个版本的新特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 集合转换Stream流式操作
- 下一篇: MarkDown写ppt