技術趣味史-Java 各個版本的特性

從 1995 年開始算起,Java 已經走過了20多個年頭,也發佈了十餘個大版本,瞭解一下 Java 的不一樣版本的特性,以便在平常的開發中更好的使用。java

《Java語言的身世》中,咱們已經知道 Java 是 1995 年宣佈誕生的,但這個版本的 Java 更像是一個 Beta 版本,也便是測試版本。git

軟件開發中的版本號修飾詞小知識:
alpha:內部版本
beta:測試版本
rc:正式版本
lts:長期穩定版
複製代碼

Java 0

1996 年 Sun 公司才發佈第一個正式的 Java 版本(rc版本),JDK1.0,開發版本代號 Oak(橡樹),以 Oak 命名版本代號,想必也是爲了記念 詹姆斯·高斯林 辦公室外的那棵橡樹吧。當時互聯網也纔剛剛開始,JDK 雖然只有幾兆(如今 Java 已達 100 多兆),可是受限於網速下載也很慢。在這種狀況下,當時仍有多家操做系統廠商使用 Java,也有上萬個網頁使用 Java 技術製做,這足以說明 Java 在當時的流行性。正則表達式

Java 1

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 的國際化打下基礎。

Java 2

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 中複雜的數據類型。

Java 3

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 4

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 就是幹這個事的)。

Java 5

2004 年 Sun 公司發佈 J2SE5(沒錯,Sun 公司又更名字了),版本代號 Tiger,這個版本的 Java 語言新功能以下:

  • 一、泛型

  • 二、Metadata,元數據,描述數據的數據。

  • 三、自動裝箱和拆箱,也就是基本數據類型(如 int)和它的包裝類型(如 Integer)自動幫你轉換(其實背後是相關的方法幫你作了轉換工做)。

  • 四、枚舉

  • 五、可變參數,一個函數能夠傳入數量不固定的參數值。

  • 六、加強版的 for 循環

  • 七、改進了 Java 的內存模型,提供了 java.util.concurrent 併發包。

Java 6

2006 年 Sun 公司發佈 JavaSE6(不要抱怨又更名字了,由於立刻就要見不到 Sun 公司了),版本代號 Mustang(野馬),也是個經典版本,直到如今也有不少人在(講個笑話,如今 Java8 的使用者,絕大多數都是用着 Java8 寫着 Java 6 的代碼,其實我也是,逃~),這個版本的 Java 主 要改變以下:

  • 一、提供動態語言支持。

  • 二、提供編譯 API,即 Java 程序能夠調用 Java 編譯器的 API。

  • 三、Swing 庫的一些改進

  • 四、JVM 的優化

  • 五、微型 HTTP 服務器 API 等。

這個版本的 Java 更可能是對以前版本功能的優化,加強了用戶的可用性和修復了一些漏洞,因此直到如今也有不少項目在使用(給項目用的Java版本升個級可能會有意想不到的的問題,因此保持原樣就行了,運維大哥要溜了溜了~)。

Java 7

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 庫的一些改進,增長多重文件的支持、文件原始數據和符號連接。

九、其餘(更可能是進一步的優化)。。。

Java 8

2014 年,JavaSE8 發佈,這個版本包含了以前本想在 JavaSE7 加入的,但因爲時間倉促延遲發佈的一些功能。

一、Lambda 表達式,簡化代碼(這個後面會專門寫一篇文章介紹)。

二、註解功能的加強

三、新的時間和日期 API,在這以前 Java 的時間和日期庫被投票爲最難用的 API 之一,因此這個版本就改進了。

四、JavaFX,一種用在桌面開發領域的技術(也是和其餘公司競爭,這個讓咱們拭目以待吧)。

五、靜態連接 JNI 程序庫(這個作安卓開發的同窗應該熟悉)。

六、其餘。。。

Java 9

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 文件自動校驗。

五、一些還在開發路上的功能。。。

JavaShell.png

至於 Java10 和 Java11 就不在這裏說了,畢竟 Java9 還沒開發完呢(偷個懶~)。

從上面 Java 的版本發展,能夠看到 Java 逐漸成長的過程,Java 也在向其餘語言學習。直到如今 Java 也仍然具備很強的生命力,那些鼓吹 Java 已死的人確定是有別有用心(這裏就不點名某些培訓機構了),還有一些擔憂將來 Java 會收費的,要知道 JDK 可不止 Oracle 一家的,開源的 OpenJDK (Oracle 的 JDK 開發者都親口說 OpenJDK 的代碼基本上就是 Oracle JDK 的源碼)和其餘廠家免費的 JDK 均可以用,因此這點大可沒必要擔憂,Java 的將來仍是一片光明的。

套用 《滿城滿是黃金甲》 中周潤發對周杰倫說的一句話,我 Java 給你的纔是你的,我 Java 不給你,你不能搶

—— 本文轉自個人微信公衆號 《編程心路》。

相關文章
相關標籤/搜索