從 1995 年開始算起,Java 已經走過了20多個年頭,也發佈了十餘個大版本,瞭解一下 Java 的不一樣版本的特性,以便在平常的開發中更好的使用。java
在《Java語言的身世》中,咱們已經知道 Java 是 1995 年宣佈誕生的,但這個版本的 Java 更像是一個 Beta 版本,也便是測試版本。git
軟件開發中的版本號修飾詞小知識:
alpha:內部版本
beta:測試版本
rc:正式版本
lts:長期穩定版
複製代碼
1996 年 Sun 公司才發佈第一個正式的 Java 版本(rc版本),JDK1.0,開發版本代號 Oak(橡樹),以 Oak 命名版本代號,想必也是爲了記念 詹姆斯·高斯林 辦公室外的那棵橡樹吧。當時互聯網也纔剛剛開始,JDK 雖然只有幾兆(如今 Java 已達 100 多兆),可是受限於網速下載也很慢。在這種狀況下,當時仍有多家操做系統廠商使用 Java,也有上萬個網頁使用 Java 技術製做,這足以說明 Java 在當時的流行性。正則表達式
1997 年 Sun 公司又發佈 JDK1.1(能夠看做是 Java1),並召開了 JavaOne 會議,聽說當時參會者人數達一萬人,創當時同類會議之最,下面是這個版本新增的功能。數據庫
一、從新編寫了用於桌面軟件開發的 AWT 庫(由於上個版本的 AWT 是 Java 最弱的組件,以前的庫對於不一樣操做系統的界面抽象太簡單,各個平臺並不能兼容,這也不符合 Java 承諾的 「write once,run anywhere」)。編程
二、加入了內部類。瀏覽器
三、支持 JavaBeans ,使得 Java 對象能夠被序列化成二進制,這樣傳輸和保存就很方便啦!(JavaBeans,Java 豆,難道是受咖啡豆的啓發?)安全
四、JDBC,讓 Java 能夠連數據庫,不過還須要數據庫開發自家的數據庫驅動才能夠。bash
五、RMI 遠程方法調用,本地代碼調用不在本地的方法,但須要遵照相關的通訊協議。服務器
六、支持不能在代碼運行時修改的反射(這時的反射功能還很弱~,對反射不懂的小夥伴能夠看這篇文章《Java進階-反射》),如在代碼運行時纔讀取文件中的配置信息,對後面代碼的運行產生影響。微信
七、一家名叫 Symantec 的公司爲 Java 開發編寫的即時編譯器(提早編譯代碼,加強代碼真正執行時的性能,後來不少語言都是這樣作的)。
八、支持國際化和Unicode編碼,爲 Java 的國際化打下基礎。
1998 年 Sun 公司發佈 J2SE1.2(不在用 jdk 命名版本了),版本代號 Playground(這裏翻譯過來不是操場,而是競技場,暗示 Java 要大幹一場),次年(1999),Sun 公司一口氣發佈了三個版本的 Java,標準版(J2SE,後來更名爲 JavaSE)、企業版(J2EE,後來更名爲 JavaEE)、微型版(J2ME,後來更名爲 JavaME),主要增長的新功能以下:
一、strictfp 關鍵字,能夠保證在不一樣平臺上的浮點數計算都是同樣的。
二、Swing 組件,能夠看做是 AWT 加強版的桌面軟件開發庫。
三、Sun 公司本身開發的即時編譯器。
四、Java plug-in,Java 相關的插件,如支持 Applet 程序的瀏覽器插件。
五、Java IDL,爲 Java 和其餘語言互通打下基礎。
六、Collections 框架(這個應該熟悉了)Java 中複雜的數據類型。
2000 年 Sun 公司發佈 J2SE1.3(能夠看做是 Java3),版本代號 Kestrel(美洲紅隼,一種鳥),主要改變以下:
一、Sun 公開的 HotSpot JVM,經典的 Java 虛擬機。JVM 絕對是 Java 語言最大的貢獻,一些新型語言(如 Scala、Groovy、Kotlin 等,能夠說它們都是 Java 這個你們族的一員)也是基於 JVM 平臺的。
二、爲遵循 CORVA 標準而修改了 RMI(你們都按標準來,之後也好學習和使用)。
三、**Java Platform Debugger Architecture,**用於 Java 調式的平臺。
四、JavaSound API,編寫音頻處理的函數庫。
五、Synthetic proxy,Java 代理的基礎(對代理不懂的小夥伴能夠看這篇文章《Java進階-動態代理》)。
Java語言的相關組織和規範(其餘語言也有相似的組織):
JCP:(Java Community Process)由世界上各個爲 Java 發展操心的人士組成的社區,參與定義 Java 新特性和新版本制定標準的組織(做爲惟一的中國表明阿里巴巴就是 JCP 的執行委員之一,阿里的 Java,騰訊的 C++ 都不是吹的)。
JSR:(Java Specification Requests)Java 語言規範請求文檔,你能夠對 Java 提出新的要求,而後 Java 相關的組織投票決定是否經過,經過後就將這個要求寫入 JSR 中,而且最終給出一個開源的實現。
JEP:(Java Enhancement Proposal),Java 加強建議,收集你們對於 JDK 的建議,起草加強 Java 哪些功能的方案,爲 JDK 新版本發佈及相關工做指定路線。
複製代碼
2002 年 Sun 公司發佈了在 JCP(Java Community Process) 的標準下開發的J2SE1.4(能夠看做是 Java4),版本代號 Merlin(灰背隼,也是一種鳥),這個版本能夠說是 Java 走向成熟的標誌,主要的新特性以下:
一、支持正則表達式。
二、assert 關鍵字,寫測試代碼用。
三、異常鏈,低級異常包裝後再拋出,也方便開發人員調試。
四、支持網絡 IPV6 標準。
五、NIO,非阻塞的 IO,優化 Java 的 IO 讀取。
六、日誌 API。
七、XML 解析器和 XSLT 轉換器。
八、集成安全和加密擴展組件(JCE, JSSE, JAAS)。
九、Java Web Start 技術,直接從瀏覽器中啓動 Java 平臺(感受有點吊~)。
十、Preference API,在 java.util.prefs 包下(軟件設置中的 preference 選項,你們確定都見過,中文翻譯過來就是首選項,用戶自定義的軟件設置會被保存,這個 API 就是幹這個事的)。
2004 年 Sun 公司發佈 J2SE5(沒錯,Sun 公司又更名字了),版本代號 Tiger,這個版本的 Java 語言新功能以下:
一、泛型。
二、Metadata,元數據,描述數據的數據。
三、自動裝箱和拆箱,也就是基本數據類型(如 int)和它的包裝類型(如 Integer)自動幫你轉換(其實背後是相關的方法幫你作了轉換工做)。
四、枚舉。
五、可變參數,一個函數能夠傳入數量不固定的參數值。
六、加強版的 for 循環。
七、改進了 Java 的內存模型,提供了 java.util.concurrent 併發包。
2006 年 Sun 公司發佈 JavaSE6(不要抱怨又更名字了,由於立刻就要見不到 Sun 公司了),版本代號 Mustang(野馬),也是個經典版本,直到如今也有不少人在寫(講個笑話,如今 Java8 的使用者,絕大多數都是用着 Java8 寫着 Java 6 的代碼,其實我也是,逃~),這個版本的 Java 主 要改變以下:
一、提供動態語言支持。
二、提供編譯 API,即 Java 程序能夠調用 Java 編譯器的 API。
三、Swing 庫的一些改進。
四、JVM 的優化。
五、微型 HTTP 服務器 API 等。
這個版本的 Java 更可能是對以前版本功能的優化,加強了用戶的可用性和修復了一些漏洞,因此直到如今也有不少項目在使用(給項目用的Java版本升個級可能會有意想不到的的問題,因此保持原樣就行了,運維大哥要溜了溜了~)。
20011 年,這時候 Oracle 已經把 Sun 公司收購了(2009 年後 Java 就是 Oracle 的人了),Oracle 發佈 JavaSE7,新增的功能以下:
一、放寬 switch 的使用,咱們能夠在 switch 中使用字符串啦,而在這個版本以前,只能使用字符和數字。
二、try-resource-with 語句,幫助咱們自動化管理資源,如打開文件,對文件操做結束後,JVM 能夠自動幫咱們關閉文件資源,固然前提是你要用 try-resource-with 語句。
三、加入了類型推斷功能,好比你以前版本使用泛型類型時這樣寫 ArrayList<User> userList= new ArrayList<User>();
,這個版本只須要這樣寫 ArrayList<User> userList= new ArrayList<>();
,也便是後面一個尖括號內的類型,JVM 幫咱們自動類型判斷補全了。
四、簡化了可變參數的使用。
五、支持二進制整數,在硬件開發中,二進制數更經常使用,方便人查看。
六、支持帶下劃線的數值,如 int a = 100000000;
,0 太多不便於人閱讀,這個版本支持這樣寫 int a = 100_000_000
,這樣就對數值一目瞭然了吧。
七、異常處理支持多個 catch 語句。
八、NIO 庫的一些改進,增長多重文件的支持、文件原始數據和符號連接。
九、其餘(更可能是進一步的優化)。。。
2014 年,JavaSE8 發佈,這個版本包含了以前本想在 JavaSE7 加入的,但因爲時間倉促延遲發佈的一些功能。
一、Lambda 表達式,簡化代碼(這個後面會專門寫一篇文章介紹)。
二、註解功能的加強。
三、新的時間和日期 API,在這以前 Java 的時間和日期庫被投票爲最難用的 API 之一,因此這個版本就改進了。
四、JavaFX,一種用在桌面開發領域的技術(也是和其餘公司競爭,這個讓咱們拭目以待吧)。
五、靜態連接 JNI 程序庫(這個作安卓開發的同窗應該熟悉)。
六、其餘。。。
2017 年,Oracle 發佈 JavaSE9(這個版本的功能早在 2011 年的 JavaOne 大會中就討論了),這個版本目前也還在更新中,一些新功能就簡要介紹一下。
一、模塊化(這點也是向其餘語言學習的,如 JavaScript)。
二、Java Shell(這點也是向其餘語言學習的,如 Python),在這以前總有人說 Java 太麻煩,寫個 Hello Word 都要新建個類,有時候測試個幾行的代碼都不方便,Java Shell 推出後,Java 開發者不用眼饞其餘語言的 Shell 了,你能夠向下面圖中這樣寫 Java 的 Hello Word 了(個人電腦上裝了 Java 六、七、八、九、10 ,準備集齊七個版本召喚 Java 神龍,txtx~)。
三、即時編譯功能的加強。
四、XML Catalogs ,XML 文件自動校驗。
五、一些還在開發路上的功能。。。
至於 Java10 和 Java11 就不在這裏說了,畢竟 Java9 還沒開發完呢(偷個懶~)。
從上面 Java 的版本發展,能夠看到 Java 逐漸成長的過程,Java 也在向其餘語言學習。直到如今 Java 也仍然具備很強的生命力,那些鼓吹 Java 已死的人確定是有別有用心(這裏就不點名某些培訓機構了),還有一些擔憂將來 Java 會收費的,要知道 JDK 可不止 Oracle 一家的,開源的 OpenJDK (Oracle 的 JDK 開發者都親口說 OpenJDK 的代碼基本上就是 Oracle JDK 的源碼)和其餘廠家免費的 JDK 均可以用,因此這點大可沒必要擔憂,Java 的將來仍是一片光明的。
套用 《滿城滿是黃金甲》 中周潤發對周杰倫說的一句話,我 Java 給你的纔是你的,我 Java 不給你,你不能搶。
—— 本文轉自個人微信公衆號 《編程心路》。