Java 發(fā)展史

Java 發(fā)展史

Java語言的誕生具有一定的戲劇性,它并不是經(jīng)過精心的策劃,制作,最后產(chǎn)生的劃時代產(chǎn)品。從某種角度來看,java語言的誕生完全是一種誤會。

image

C++ 的局限性是Java誕生的客觀原因

1990年末,太陽(Sun)公司預(yù)料嵌入式系統(tǒng)將在未來家用電器領(lǐng)域大顯身手。 該團(tuán)隊最初考慮使用C++語言,但很多成員包括太陽公司首席科學(xué)家比爾·喬伊(Bill Joy)發(fā)現(xiàn)C++和可用API在某些方面存在很大問題。工作小組使用嵌入式平臺,可用系統(tǒng)資源極其有限,C++太過復(fù)雜,以致很多開發(fā)者經(jīng)常錯誤使用。并且C++缺少垃圾回收系統(tǒng),可移植性差,缺乏分布式和多線程等功能。 他決定創(chuàng)造一種全新的語言----Oak(橡樹),當(dāng)時Oak這個商品已經(jīng)被注冊,于是只得將Oak更名為Java。

太陽公司在1995年初發(fā)布了Java語言,太陽公司直接把Java放到互聯(lián)網(wǎng)上免費給大家使用,甚至連源代碼也不保密,向所有人公開。Java成了互聯(lián)網(wǎng)上最熱門的寶貝,竟有10萬多人次訪問了太陽公司的網(wǎng)頁,下載Java語言,并出現(xiàn)了數(shù)不清的Java小程序(Applet),演示著各種小動畫、小游戲等。

image

Java版本

JDK 1.2 版本分離

1998年12月太陽公司發(fā)布了Java歷史上最重要的JDK版本,JDK 1.2,伴隨著JDK 1.2一同發(fā)布的還有JSP(JavaServer Pages)/Servlet、EJB(Enterprise Java Beans)等規(guī)范,并將Java分成J2SE(Java 2 Standard Edition)、J2EE(Java 2 Enterprise Edition)和J2ME(Java 2 Micro Edition)三個版本。

  • J2SE:整個Java技術(shù)的核心和基礎(chǔ),它是J2ME、J2EE編程的基礎(chǔ)。
  • J2EE:Java技術(shù)中應(yīng)用最廣泛的部分,J2EE提供了企業(yè)應(yīng)用開發(fā)相關(guān)的完整解決方案。
  • J2ME:主要用于控制移動設(shè)備和信息家電等有限存儲的設(shè)備。
image
image

JDK 1.4 百家爭鳴

2002年,太陽公司發(fā)布了JDK歷史上最成熟、發(fā)展最快的一個JDK版本 - JDK 1.4。Java語言在企業(yè)應(yīng)用領(lǐng)域大放異彩,涌現(xiàn)出大量基于java語言的開源框架,Struts、WebWork、Hibernate、Spring等。大量企業(yè)應(yīng)用服務(wù)也開始涌現(xiàn),WebLogic、WebSphere、JBoss等,這些都標(biāo)志著Java語言進(jìn)入了飛速發(fā)展時期。

image

JDK 1.5(Java SE 5) 泛型參數(shù)

JDK1.5增加了諸如泛型、增強的for語句、可變數(shù)量形參、注釋、自動拆箱和裝箱等功能。同時,也發(fā)布了新的企業(yè)級平臺規(guī)范,如通過注釋等新特性來簡化EJB的復(fù)雜性,并推出了自己的MVC框架規(guī)范----JSF(JavaServer Faces),JSF規(guī)范類似于asp.net的服務(wù)器端控件,通過它可以快速構(gòu)建復(fù)雜的JSP界面。

image

JDK 1.6(Java EE 6) 太陽隕落

2006年12月,太陽公司發(fā)布了Java EE 6。但在2009年4月20日,甲骨文(Oracle)公司宣布將收購太陽公司。太陽公司倒下了,不過Java的大旗依然獵獵作響。

oracle-sun.png

JDK 1.7(Java SE 7) Oracle升起

時隔五年即2011年7月28日,甲骨文公司終于發(fā)布了Java SE 7,引入了二進(jìn)制整數(shù),支持字符串的switch語句,棱形語法,多異常捕抓,自動關(guān)閉資源的try語言等新特性。

image

JDK 1.8(Java SE 8) 函數(shù)式編程

2014年3月18日,甲骨文發(fā)布了Java SE 8,帶來了全新的函數(shù)式編程、Lambda表達(dá)式、流式編程等大量新特性,這些新特性使得Java變得更加強大,成為當(dāng)下最主流的版本。

java8-lamda.png

JDK 1.9(Java SE 9) 模塊化

2017年9月22日,Java SE 9 發(fā)布,強化了Java的模塊化系統(tǒng),讓龐大的Java語言更輕量化,,并在核心類庫上進(jìn)行了大量更新,可以進(jìn)一步簡化編程,但對語法本身更新并不多,畢竟Java語法體系已經(jīng)足夠成熟。

image

JDK 1.10(Java SE 10) 6月迭代

2018年3月21日,Java SE 10 發(fā)布。為了更快地迭代,更好地跟進(jìn)Java社區(qū)反饋,Java語言版本發(fā)布周期調(diào)整為每隔6個月發(fā)布一次。Java 10帶來了很多新特性,其中最備受關(guān)注的莫過于局部變量類型推斷。除此之外,還有其他包括垃圾收集器改善、GC改進(jìn)、性能提升、線程管控等一批新特性。

java 10 半年迭代.png

JDK 1.11(Java SE 11) 3年周期

Java 10 發(fā)布半年之后,即2018年9月25日,甲骨文公司宣布Java 11 (18.9 LTS) 正式發(fā)布,值得注意的是,Java 11是Java的一個長期支持版本LTS(Long Term Support),Java 11的技術(shù)支持時間直到2023年9月份,補丁和擴(kuò)展支持直到2026年9月份。同時甲骨文公司公布的Java后續(xù)版本路線圖展示新的長期支持版本將每三年發(fā)布一次。

image

JDK 1.12(Java SE 12) 優(yōu)雅Switch

Java SE 12 發(fā)布于2019年3月,引入了幾個新功能和改進(jìn),旨在使Java開發(fā)更快、更可靠和更安全。 - 在 Java 12 中,對 Switch 表達(dá)式的寫法進(jìn)行了改進(jìn),雖然是一個語法糖的改進(jìn),也讓 Switch 的代碼編寫變得更加優(yōu)雅。 - Java SE 12包括對JVM的改進(jìn),導(dǎo)致啟動時間更快。這意味著Java應(yīng)用程序?qū)⒏斓貑?,使其更響?yīng)并且更容易使用。 - 引入了JFR事件流,允許實時流式傳輸JFR事件,使診斷和解決性能問題變得更加容易。

image
image

JDK 1.13(Java SE 13) 優(yōu)雅長文本

Java 13 早在 2019 年 9 月就已經(jīng)發(fā)布,雖然不是長久支持版本,但是也帶來了不少新功能。最優(yōu)雅的當(dāng)屬文本塊功能,再也不用丑陋的連接符拼接大段文本了。

java13 之前

image

java13 之后

image

JDK 1.14(Java SE 14) 優(yōu)雅NPE

2020 年 3 月 Java 14 發(fā)布,雖然不是LTS版本,但是也帶來了不少新功能。日常實用的便是更有用的 NullPointerExceptions。 但是在 Java 14 之前,如果一行有多個表達(dá)式時,這時報了空指針后,單純的從報錯信息來看,可能并不知道是哪個對象為 NULL ,下面是一個演示

舊版 NPE

image

新版NPE

image

JDK 1.15(Java SE 15) 擴(kuò)展類體系

Java 15 在 2020 年 9 月發(fā)布,帶來了Sealed Classes(密封類)、Hidden Classes(隱藏類)2個新的類機(jī)制,擴(kuò)展java面向?qū)ο蟮奶匦浴?/p>

  • Sealed Classes(密封類)

Java 15 引入 sealed 類,被 sealed 修飾的類可以指定子類。這樣這個類就只能被指定的類繼承。而且 sealed 修飾的類的機(jī)制具有傳遞性,它的子類必須使用指定的關(guān)鍵字進(jìn)行修飾,且只能是 final、sealed、non-sealed 三者之一。

image
  • Hidden Classes(隱藏類)

Hidden Classes就是不能直接被其他class的二進(jìn)制代碼使用的class。Hidden Classes主要被一些框架用來生成運行時類,但是這些類不是被用來直接使用的,而是通過反射機(jī)制來調(diào)用。比如在JDK8中引入的lambda表達(dá)式,JVM并不會在編譯的時候?qū)ambda表達(dá)式轉(zhuǎn)換成為專門的類,而是在運行時將相應(yīng)的字節(jié)碼動態(tài)生成相應(yīng)的類對象。

這個特性讓開發(fā)者可以引入一個無法被其他地方發(fā)現(xiàn)使用,且類的生命周期有限的類。這對運行時動態(tài)生成類的使用方式十分有利,可以減少內(nèi)存占用。

image

編譯后

image

JDK 1.16(Java SE 16) Git化

Java 16 在 2021 年 3 月 16 日正式發(fā)布,將OpenJDK 源代碼是使用版本管理工具 Mercurial 進(jìn)行管理的,現(xiàn)在遷移到了 Git ,主要原因如下:

  • Mercurial 生成的版本控制元數(shù)據(jù)過大。
  • Mercurial 相關(guān)的開發(fā)工具比較少,而 Git 幾乎在所有的主流 IDE 中已經(jīng)無縫集成。
  • Mercurial 相關(guān)的服務(wù)比較少,無論是自建托管,還是服務(wù)托管。
image

JDK 1.17(Java SE 17) LTS版本

Java 17 在 2021 年 9 月 14 日正式發(fā)布,Java 17 是一個長期支持(LTS)版本,共帶來 14 個新功能。

Java 17 -lts.png
image

總結(jié)

以上就是Java發(fā)展史的簡單總結(jié),而一種語言如果想要長久的發(fā)展,就要不斷的進(jìn)行更新,保持行業(yè)領(lǐng)先,并且Java使用前景也比較廣闊,許多企業(yè)都在使用,而如果要學(xué)習(xí)的同學(xué)們,可以選擇長期支持版本進(jìn)行學(xué)習(xí),而 Java SE 8 在現(xiàn)在使用的比較多的版本,而如果進(jìn)行微服務(wù)開發(fā)和公司有需求,學(xué)習(xí) Java SE 11 也是可以的。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容