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

Wizey發表於2018-11-30

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

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

軟體開發中的版本號修飾詞小知識:
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 會議,據說當時參會者人數達一萬人,創當時同類會議之最,下面是這個版本新增的功能。

  • 1、重新編寫了用於桌面軟體開發的 AWT 庫(因為上個版本的 AWT 是 Java 最弱的元件,之前的庫對於不同作業系統的介面抽象太簡單,各個平臺並不能相容,這也不符合 Java 承諾的 “write once,run anywhere”)。

  • 2、加入了內部類。

  • 3、支援 JavaBeans ,使得 Java 物件可以被序列化成二進位制,這樣傳輸和儲存就很方便啦!(JavaBeans,Java 豆,難道是受咖啡豆的啟發?)

  • 4、JDBC,讓 Java 可以連資料庫,不過還需要資料庫開發自家的資料庫驅動才可以。

  • 5、RMI 遠端方法呼叫,原生程式碼呼叫不在本地的方法,但需要遵守相關的通訊協議。

  • 6、支援不能在程式碼執行時修改的反射(這時的反射功能還很弱~,對反射不懂的小夥伴可以看這篇文章《Java進階-反射》),如在程式碼執行時才讀取檔案中的配置資訊,對後面程式碼的執行產生影響。

  • 7、一家名叫 Symantec 的公司為 Java 開發編寫的即時編譯器(提前編譯程式碼,增強程式碼真正執行時的效能,後來很多語言都是這樣做的)。

  • 8、支援國際化和Unicode編碼,為 Java 的國際化打下基礎。

Java 2

1998 年 Sun 公司釋出 J2SE1.2(不在用 jdk 命名版本了),版本代號 Playground(這裡翻譯過來不是操場,而是競技場,暗示 Java 要大幹一場),次年(1999),Sun 公司一口氣釋出了三個版本的 Java,標準版(J2SE,後來改名為 JavaSE)、企業版(J2EE,後來改名為 JavaEE)、微型版(J2ME,後來改名為 JavaME),主要增加的新功能如下:

  • 1、strictfp 關鍵字,可以保證在不同平臺上的浮點數計算都是一樣的。

  • 2、Swing 元件,可以看作是 AWT 增強版的桌面軟體開發庫。

  • 3、Sun 公司自己開發的即時編譯器

  • 4、Java plug-in,Java 相關的外掛,如支援 Applet 程式的瀏覽器外掛。

  • 5、Java IDL,為 Java 和其他語言互通打下基礎。

  • 6、Collections 框架(這個應該熟悉了)Java 中複雜的資料型別。

Java 3

2000 年 Sun 公司釋出 J2SE1.3(可以看作是 Java3),版本代號 Kestrel(美洲紅隼,一種鳥),主要改變如下:

  • 1、Sun 公開的 HotSpot JVM,經典的 Java 虛擬機器。JVM 絕對是 Java 語言最大的貢獻,一些新型語言(如 Scala、Groovy、Kotlin 等,可以說它們都是 Java 這個大家族的一員)也是基於 JVM 平臺的。

  • 2、為遵循 CORVA 標準而修改了 RMI(大家都按標準來,以後也好學習和使用)。

  • 3、**Java Platform Debugger Architecture,**用於 Java 調式的平臺。

  • 4、JavaSound API,編寫音訊處理的函式庫。

  • 5、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 走向成熟的標誌,主要的新特性如下:

  • 1、支援正規表示式

  • 2、assert 關鍵字,寫測試程式碼用。

  • 3、異常鏈,低階異常包裝後再丟擲,也方便開發人員除錯。

  • 4、支援網路 IPV6 標準。

  • 5、NIO,非阻塞的 IO,優化 Java 的 IO 讀取。

  • 6、日誌 API。

  • 7、XML 解析器和 XSLT 轉換器

  • 8、整合安全和加密擴充套件元件(JCE, JSSE, JAAS)。

  • 9、Java Web Start 技術,直接從瀏覽器中啟動 Java 平臺(感覺有點吊~)。

  • 10、Preference API,在 java.util.prefs 包下(軟體設定中的 preference 選項,大家肯定都見過,中文翻譯過來就是首選項,使用者自定義的軟體設定會被儲存,這個 API 就是幹這個事的)。

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、其他。。。

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、一些還在開發路上的功能。。。

JavaShell.png

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

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

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

—— 本文轉自我的微信公眾號 《程式設計心路》。

相關文章