Java 發展簡史:初生遇低谷,崛起於網際網路
Java 發展簡史:初生遇低谷,崛起於網際網路
Java 起源與誕生
20世紀90年代,單片式計算機系統誕生,單片式計算機系統不僅廉價,而且功能強大,使用它可以大幅度提升消費性電子產品的智慧化程度。
SUN公司為了搶佔市場先機,在1991年成立了一個由詹姆斯·高斯林(James Gosling)領導,名為“Green”專案小組,目的是開發一種能夠在各種消費性電子產品上執行的程式架構。
那麼使用何種程式語言來設計,是專案小組頭疼的事。當時C++較為有優勢的,專案小組首先考慮的是採用它來編寫程式,但C++過於複雜和龐大,再加上由於消費電子產品所採用的嵌入式處理器晶片的種類繁雜,需要讓編寫的程式跨平臺執行,假如用C++編寫的話對程式的跨平臺執行不友好。
最後專案小組決定:既不用C++編寫,也不開發全新的程式語言,而是對C++進行改造:去除了C++複雜的指標和記憶體管理,並結合嵌入式系統的實時性要求,最終在1992年,他們開發了一種名為“Oak”的面嚮物件語言。科當他們在向硬體生產商進行演示的時候,硬體生產商對此並不感冒,OaK語言因為缺乏硬體的支援而無法進入市場,從而被擱置一旁。1994年,專案小組看到了瀏覽器在未來的發展前景,於是決定將OaK應用於全球資訊網。1995年,他們用OaK語言研發了一種能將小程式嵌入到網頁中執行的技術——Applet,由於Applet不僅能嵌入網頁,還可隨同網頁在網路上進行傳輸,這讓無數的程式設計師看到了OaK這門語言,與此同時,OaK正式更名為Java。從此,Java在網際網路的推動下火了。
Java的衍變
1996年1月,SUN公司推出了JDK1.0。在JDK1.0釋出後,有很多程式設計師學習並運用Java來製作網頁,JDK包括兩大部分:開發工具和執行環境。
執行環境包括核心API、整合API、使用者介面API、釋出技術、Java虛擬機器(JVM)。JDK1.0的釋出,標誌著Java成為一種獨立的開發工具。在同年9月,約有8.3萬個網頁應用了Java技術來製作。
JDK1.0的代表性技術有:Java虛擬機器、Applet、AWT等。
1997年2月,SUN公司緊接著推出了JDK 1.1,在推出後3周時間裡,達到了近22萬次的下載量。4月2日,首屆Java One大會在美國舊金山召開,參加會議的人超過一萬人,創造了當時全球同類會議規模最高的紀錄。9月,Java Developer Connection社群成員超過10萬,同年還有10個最主要的作業系統供應商正式宣告將在他們的產品中使用Java。
JDK1.1的代表性技術有:JDBC、JavaBeans、RMI、JAR檔案格式、Java語法中的內部類和反射。
1998年12月8日,JDK1.2——第二代Java平臺的企業版J2EE釋出。
1999年6月,Sun公司把Java體系分為三個方向:
J2ME(Java2 Micro Edition,Java2平臺的微型版),應用於移動、無線及有限資源的環境;
J2SE(Java 2 Standard Edition,Java 2平臺的標準版),應用於桌面環境;
J2EE(Java 2Enterprise Edition,Java 2平臺的企業版),應用於基於Java的應用伺服器。
隨著供應商的不同,Java的API也分為三大類:
Java Core API:Java核心類庫;
Java Optional API:對之前API的擴充;
特殊API:由特殊廠商或組織提供的API。
Java 2平臺的釋出,是Java發展過程中最重要的一個里程碑,標誌著Java的應用開始普及。
JKD1.2的代表性技術有:Swing、Java IDL、EJB、Java Plug-in等,在API文件中,添加了strictfp關鍵字和Collections集合類。
1999年4月27日,HotSpot虛擬機發布。HotSpot是由一家叫“Longview Technologies”的小公司開發的,後來被SUN公司收購。HotSpot虛擬機發布時是作為JDK 1.2的附加程式提供的,後來它成為了JDK 1.3及之後所有版本的Sun JDK的預設虛擬機器 。
2000年5月,JDK1.3、JDK1.4和J2SE1.3相繼釋出,J2SE1.3是對J2SE1.2的補充和擴充套件,從應用領域的角度分析,JavaSE1.3已經涵蓋了資料庫、WEB、網路、圖形、多媒體、電話、影像等大部分的資訊科技領域。
2002年2月26日,J2SE1.4釋出。與J2SE1.3相比,多了近62%的類和介面。在這些新特性當中,還提供了廣泛的XML支援、安全套接字(Socket)支援(通過SSL與TLS協議)、全新的I/OAPI、正則表示式、日誌與斷言。
2004年9月30日,J2SE1.5釋出,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0(內部版本號1.5.0)。Java SE 5.0包含了從1996年釋出1.0版本以來的最重大的更新,其中包括泛型支援、基本型別的自動裝箱、改進的迴圈、列舉型別、格式化I/O及可變引數。
2005年6月,在Java One大會上,Sun公司釋出了Java SE 6。此時,Java的各種版本已經更名,已取消其中的數字2,如J2EE更名為JavaEE,J2SE更名為JavaSE,J2ME更名為JavaME。
2011年7月28日,收購Sun公司的Oracle釋出了 Java SE 7,引入了二進位制整數、支援字串的switch語句、稜形語法、多異常捕抓、自動關閉資源的try語言等新特性。
2014年3月18日,Oracle公司釋出Java SE8,這次版本升級為Java帶來了全新的Lambda表示式、流式程式設計等大量新特性,這些新特性使得Java變得更加強大。
2017年9月22日,Oracle公司釋出Java SE 9,這次版本升級強化了Java的模組化系統,讓Java語言更輕量化,且採用了更高效、更智慧的GI 垃圾回收器,並在核心類庫上進行大量更新,可進一步簡化程式設計。
2018 年 3 月 21 日,Java SE 10 釋出,Java 10 版本帶來了很多新特性,其中最備受廣大開發者關注的莫過於區域性變數型別推斷。此外,還包垃圾收集器改善、GC 改進、效能提升、執行緒管控等新特性。
2018年9月26日,Java SE 11 釋出。這是 Java 大版本週期變化後的第一個長期支援版本(LTS版本持續支援到2026年9月)。Java11 帶來了 ZGC、Http Client 等重要特性,一共包含 17 個 JEP(JDK Enhancement Proposals,JDK 增強提案)。
2019年3月20日,Java SE 12 釋出。Java 12是短期支援版本,可在下一個版本釋出之前獲得Oracle的商業支援。
2019年9月23日,Java SE 13釋出,此版本中添加了“文字塊”,文字塊是一個多行字串文字,避免對大多數轉義序列的需要,以可預測的方式自動格式化字串,並在需要時讓開發人員控制格式。
Java歷經千辛萬苦,換來春暖花開
經過二十多年的版本更新,一步步的積累,造就瞭如今的Java。一覽Java在更新曆程中所新增的特性:
Java 1.0:
- 虛擬機器——Sun Classic VM
- Java小應用程式——Applet
- Java圖形設計——AWT
Java 1.1:
- Jar包——Jar
- Java規範——JavaBeans
- 連線資料庫——JDBC(Java DataBase Connectivity)遠端呼叫——RMI
- 內部類——Inner Class
- 反射——Reflection
Java 1.2:
-
字串常量做記憶體對映
-
對打包的Java檔案進行數字簽名
-
控制授權訪問系統資源的策略工具
-
JDBC中引入可滾動結果集,BLOB,CLOB,批量更新和使用者自定義型別
-
在Applet中新增聲音支援
-
即時編譯技術——JIT
-
執行外掛——Java Plug-In
-
J2EE規範——EJB
-
平臺物件請求代理體系結構——Java IDL
-
集合——Collections
Java 1.3:
-
數學運算
-
CORBA IIOP實現RMI的通訊協議
-
Java 2D新特性
-
Jar檔案索引
-
時間——Timer API
-
聲音——Java Sound API
Java1.4:
- 正則表示式
- 異常鏈
- XML解析器
- XSLT轉換器
- XML處理
- Java列印服務
- JDBC高階——Java Web Start JDBC 3.0
- 可以作業系統的高階功能——Preferences
- 高階流——NIO
- 日誌功能——Logging
- 圖片流——Imgae I/O
Java1.5:
- 自動裝箱拆箱
- 泛型
- 元資料
- 靜態引入
- 內省——Introspector
- 列舉——enum
- 可變長引數——Varargs
- 高階虛幻——foreach
- 記憶體模型——JMM
- 併發包——concurrent
Java SE 6:
- 命名方式變更
- 指令碼語言
- 編譯API和微型HTTP伺服器API
- 鎖與同步
- 垃圾收集
- 類載入
- Kerberos
- LDAP
- JDBC高階——JDBC 4.0
- Java™ 程式語言編譯器的介面——Java Compiler
- 可插拔註解
- 公鑰基礎設——Native PKI
- 通用安全服務——Java GSS
- web服務——Web Services
Java SE 7:
- switch語句塊中允許以字串作為分支條件
- 建立泛型物件時應用型別推斷
- try-with-resources
- null值得自動處理
- 數值型別可以用二進位制字串表示
- 引入Java NIO.2開發包
- 動態語言支援
- 安全的加減乘除
- Map集合支援併發請求
Java SE 8:
Java SE 8在Java更新的歷史中是一個非常重要的版本,引入的函數語言程式設計使得Java程式設計更為強大,較典型的有:
- Java工具的操作增強
- Unicode增強功能,包括對Unicode 6.2.0的支援
- 並行陣列排序
- 標準編碼和解碼Base64
- 無符號算術支援
- 新的併發
- Lambda表示式
- 方法引數反射Java XML技術增強功能
- 虛擬機器操作增強JSSE伺服器中的SSL / TLS伺服器名稱指示(SNI)擴充套件支援
- 支援AEAD演算法……
Java SE 9、10……版本的不斷更新,是對舊版本改良以及補充,越更新,越友好。
看今朝,Java 位居世界程式語言榜首,風光無限好。憶往昔,初生之時便陷入低谷,後借網際網路之勢拔地而起,J2SE攻佔桌面、J2ME攻佔手機、J2EE攻佔伺服器,Java三大強軍也曾飽受歲月蹉跎,後浴火重生,最終投入Oracle懷抱,換得春暖花開。此情此景,悲之、喜之、感之、嘆之,Java如今之風光,並非一日之功,望天下眾程式設計師惜之、盼之。
Java已崛起,未來有可期
1、用發展的眼光看Java:API穩更新,複用性穩強化
Java的更新速度是很快的,每隔一段時間都會進行一次版本迭代,來適應新技術的發展趨勢,學Java的程式設計師遍佈全世界,很慶幸我也是茫茫Java程式設計師中的一員,近些年來很火熱的大資料也是和Java息息相關。Java本身具有很大的開放性和可擴充套件性,再加上Java如此雄厚的歷史背景,我相信一個語言只要不斷髮展,就很難會被時代淘汰。
2、用就業的眼光看Java:網際網路的時代、人工智慧的時代、5G+的時代,Java一直都在
隨著網路的發展,如今Java已廣泛應用於資料中心、PC、遊戲、行動電話等行業,從近幾年的招聘量上來看,對Java開發人員的需求量依舊很大,Java的學習依舊是主流,發展前景一片光明。我國資訊化人才培養還處於發展階段,導致社會實際需求人才基數遠遠大於資訊化人才的培養基數,使得數以萬計的中小企業急需全面系統掌握Java軟體開發基礎技能與知識的軟體工程師。Java軟體工程師就業前景良好,再加上Java軟體工程師不僅IT專業企業需要,廣大的非IT企業也需要,前景是較為樂觀的。目前我所瞭解的有:1、Java企業級應用開發目前Java在許多行業的企業資訊應用方面有很多,比如郵箱、物流、醫療、股票、OA、金融等資訊系統。這些和目前的主流行業密切相關的,所以Java開發者的需求還是較大,待遇也是相當不錯,工資水平與Java網際網路方向的差不多,很容易在一些大型企業就業,只要你有恆心有毅力地學習,我想至少面臨這麼多選擇時,你不會一無所用,機會總是會留給有準備的人。2、Java網站建設近些年來,網站建設業務一直呈現快速上升的勢頭,行業市場也是越來越大,很多新技術的應用使得企業網站建設更具魅力、更加強大。Java程式語言將使網站結構更緊密,訪問更流暢,更能適應新的要求。雖然以目前的市場分析Java做網站成本太高,而且對硬體要求也比較高,中小企業大多都會選擇使用PHP語言進行開發,但是在很多大型企業還是用Java語言的比較多,所以你依舊有機會,向大廠衝鴨。3、 Android開發Android是全球最大的智慧手機作業系統,前幾年Android發展快速,在國內的市場份額也是越來越高,但在快速興起的小程式和H5的衝擊下,導致Android原生開發門檻增高,公司對Android開發工程師的要求也提高了,這就要求學習Android的程式設計師們精於技術,優秀的Android開發工程師仍然存在不小的缺口,中、高階的Android工程師還是很受歡迎的。Android應用的主要開發語言就是Java,所以如果你技術很精,選擇Android這個方向還是很不錯的。4、Java遊戲開發Java可用來編寫遊戲指令碼,如Bean、Shell、Groovy等指令碼語言可以方便、無縫的和Java語言進行互動,這些極大地促進Java遊戲程式設計。當前國內遊戲較為火熱,很多熱門電競,所以國內遊戲專業人才的需求一直都存在缺口。所以,好好努力去填補這些缺口吧,只要你有過人的技術,不愁沒飯吃。
不忘初心,與Java同行
我是一名學Java的程式設計師,通過整理撰寫本文,我又重新認識了Java。在我看來,Java的”火“並不是偶然的,有很多因素的積累而成。Java的發展程序值得考究,作為一名Java的忠實粉絲,Java的重要性不言而喻,相信不管是計算機專業還是非計算機專業的程式設計師也會感同身受。對我而言,其他Java程式設計師也是一樣,因為對Java有著持久不衰的熱愛,所以願意不斷追求專業追求卓越,而帶著這份忠誠的熱愛,我們不畏風雨,一路前行。不忘初心,方得始終,我願以Java為馬,詩酒趁年華!
參考:Java百度百科