jdk各個版本之間的差異
背景:求職過程中,這個問題反復被問到。如果答不上來,只能說明基本功不紮實,並不能說自己擅長java。
技術趣味史-Java 各個版本的特性
Java 5
2004 年 Sun 公司發布 J2SE5(沒錯,Sun 公司又改名字了),版本代號 Tiger,這個版本的 Java 語言新功能如下:
-
1、泛型。
-
2、Metadata,元數據,描述數據的數據。
-
3、自動裝箱和拆箱,也就是基本數據類型(如 int)和它的包裝類型(如 Integer)自動幫你轉換(其實背後是相關的方法幫你做了轉換工作)。
-
4、枚舉。
-
5、可變參數,一個函數可以傳入數量不固定的參數值。
-
6、增強版的 for 循環。
-
7、改進了 Java 的內存模型,提供了 java.util.concurrent 並發包。
Java 6
2006 年 Sun 公司發布 JavaSE6(不要抱怨又改名字了,因為馬上就要見不到 Sun 公司了),版本代號 Mustang(野馬),也是個經典版本,直到現在也有很多人在寫(講個笑話,現在 Java8 的使用者,絕大多數都是用著 Java8 寫著 Java 6 的代碼,其實我也是,逃~),這個版本的 Java 主 要改變如下:
-
1、提供動態語言支持。
-
2、提供編譯 API,即 Java 程序可以調用 Java 編譯器的 API。
-
3、Swing 庫的一些改進。
-
4、JVM 的優化。
-
5、微型 HTTP 服務器 API 等。
這個版本的 Java 更多是對之前版本功能的優化,增強了用戶的可用性和修復了一些漏洞,所以直到現在也有很多項目在使用(給項目用的Java版本升個級可能會有意想不到的的問題,所以保持原樣就好了,運維大哥要溜了溜了~)。
Java 7
20011 年,這時候 Oracle 已經把 Sun 公司收購了(2009 年後 Java 就是 Oracle 的人了),Oracle 發布 JavaSE7,新增的功能如下:
1、放寬 switch 的使用,我們可以在 switch 中使用字符串
2、try-resource-with 語句,幫助我們自動化管理資源,如打開文件,對文件操作結束後,JVM 可以自動幫我們關閉文件資源,當然前提是你要用 try-resource-with 語句。
3、加入了類型推斷功能,比如你之前版本使用泛型類型時這樣寫 ArrayList<User> userList= new ArrayList<User>();
,這個版本只需要這樣寫 ArrayList<User> userList= new ArrayList<>();
,也即是後面一個尖括號內的類型,JVM 幫我們自動類型判斷補全了。
4、簡化了可變參數的使用。
5、支持二進制整數,在硬件開發中,二進制數更常用,方便人查看。
6、支持帶下劃線的數值,如 int a = 100000000;
,0 太多不便於人閱讀,這個版本支持這樣寫 int a = 100_000_000
,這樣就對數值一目了然了吧。
7、異常處理支持多個 catch 語句。
8、NIO 庫的一些改進,增加多重文件的支持、文件原始數據和符號鏈接。
9、其他(更多是進一步的優化)。。。
Java 8(推薦版本)
2014 年,JavaSE8 發布,這個版本包含了之前本想在 JavaSE7 加入的,但由於時間倉促延遲發布的一些功能。
1、Lambda 表達式,簡化代碼(這個後面會專門寫一篇文章介紹)。
2、註解功能的增強。重復註解和註解擴展,現在幾乎可以為任何東西添加註解:局部變量、泛型類、父類與接口的實現,就連方法的異常也能添加註解。
3、新的時間和日期 API,在這之前 Java 的時間和日期庫被投票為最難用的 API 之一,所以這個版本就改進了。
4、JavaFX,一種用在桌面開發領域的技術(也是和其他公司競爭,這個讓我們拭目以待吧)。
5、靜態鏈接 JNI 程序庫(這個做安卓開發的同學應該熟悉)。
6、接口默認方法和靜態方法
7、函數式接口
8、方法引用
9、java.util.stream
10、HashMap的底層實現有變化
11、JVM內存管理方面,由元空間代替了永久代。
區別:
- 元空間並不在虛擬機中,而是使用本地內存
- 默認情況下,元空間的大小僅受本地內存限制
- 也可以通過-XX:MetaspaceSize指定元空間大小
Java 面試知識點解析(四)——版本特性篇(2)
ps:詳細講解了jdk8中的各個新特性
Java 9
2017 年,Oracle 發布 JavaSE9(這個版本的功能早在 2011 年的 JavaOne 大會中就討論了),這個版本目前也還在更新中,一些新功能就簡要介紹一下。
1、模塊化(這點也是向其他語言學習的,如 JavaScript)。
2、Java Shell(這點也是向其他語言學習的,如 Python),在這之前總有人說 Java 太麻煩,寫個 Hello Word 都要新建個類,有時候測試個幾行的代碼都不方便,Java Shell 推出後,Java 開發者不用眼饞其他語言的 Shell 了,你可以向下面圖中這樣寫 Java 的 Hello Word 了(我的電腦上裝了 Java 6、7、8、9、10 ,準備集齊七個版本召喚 Java 神龍,txtx~)。
3、即時編譯功能的增強。
4、XML Catalogs ,XML 文件自動校驗。
5、一些還在開發路上的功能。。。
jdk各個版本之間的差異