閱讀本文你將收穫:
為什麼要學習 Java
Java 這門語言如今是網際網路行業炙手可熱的程式語言,像阿里、美團這些大廠,技術體系都是建立在 Java 之上。這些大廠又是很多新興網際網路企業的技術風向標,因此 Java 使用範圍相當的廣,對 Java 程式設計師的需求量就相當的大。
Java 不僅僅是一杯熱騰騰的咖啡,還可以是一個靠得住的飯碗!
蝸牛從大學開始就接觸 Java,工作之後也一直是使用 Java 這門程式設計語言作為程式設計首選。希望結合自己的知識體系和實踐經驗,產出 Java 學習的一系列教程,能夠幫助到對 Java 感興趣或者有志於從事 Java 程式設計師這個崗位的同學。
學習一個東西,首先要知道它是什麼,基於什麼樣的背景下出現的,後續又是如何演變的。本文就簡要介紹下 Java 的歷史。
計算機系統層次與程式語言進化史
Java 是一種程式語言,和其他程式語言一樣,它解決了人與計算機之間交流和溝通的問題,程式設計師這個特殊人群能編寫,計算機能識別,從而能夠設計出計算機的功能,便利人們的工作和生活。
那麼 Java 是怎麼出現的呢?都有其他程式語言了,為什麼還需要它?
程式語言既然是執行在計算機之上的,我們首先看下計算機系統層次與程式語言的進化史。
早期計算機系統是用機器語言進行程式設計,機器語言也就被稱為第一代程式設計語言(First Generation Programing Language, 1GL)。
機器語言簡單講就是由二進位制數 0 和 1 組成的一串指令。眾多指令構成的指令集,就可以操控計算機硬體。
但如果讓你只用 0 和 1 來設計程式,你肯定頭大,因為機器語言的可讀性,容錯性和便捷性真的是太差了!
因此後期的計算機系統用一些容易理解和記憶的字母或單詞來代替一個特定的指令,比如:用「ADD」代表數字邏輯上的加減,這就是第二代程式設計語言——組合語言。
組合語言需要轉換成機器指令,作業系統就提供了組合語言與機器互動的介面。作業系統將指令集體系結構進行封裝,抽象成被上層使用者使用的介面,包括使用者介面和底層服務。
如果學習過組合語言的同學會知道,組合語言是一種低階語言,仍然要和計算機硬體直接打交道,比如它還是要呼叫儲存器儲存資料。
這就意味著組合語言不僅編寫複雜易出錯,它的可移植性也很差!我換一個有點差異的計算機硬體,這個應用程式就會掛。
為了解決這個問題,現代的計算機系統就支援了高階語言。首先出現的是第三代程式設計語言——過程式高階語言,編碼時需要描述實現過程,即「如何做」,像 C 語言這種。
隨著過程式高階語言的廣泛使用,越來越多的人發現,他們其實不關心問題的解法和執行過程,他們只關心自己的輸入記錄以及最終的輸出結果,其它工作希望都由系統來完成。
基於這樣的思路,後來就出現了第四代程式設計語言——非過程式高階語言,編碼時只需說明「做什麼」,不需要描述具體的演算法實現細節,像 Java 語言這種。
Java 萌芽期
Java 起初不叫 Java,它的出現也不是必然。
在 1990 年年末,美國一家叫 Sun 的公司著手研發嵌入式系統用於家電領域。當時安排 James Gosling 領導研發,內部把這個專案命名為 「Green 計劃」,這個計劃的目標是為下一代智慧家電(電視機、微波爐、電話)編寫通用的控制系統。
當時比較常用的程式語言是 C++,但 C++ 其實不太好用。第一,C++ 複雜,容易造成開發者誤用,第二,C++ 缺少垃圾回收系統、可移植性、分散式和多執行緒等功能。
於是,Sun 首席科學家 Bill Joy 就提議開發新語言,在 C++ 的基礎上,開發一種物件導向的環境。
James Gosling 就投入研發全新的語言,新的語言需要名字來展示生命力,這時 James Gosling 看到了辦公室外的橡樹,就把新語言命名為:Oak。
1992 年夏天,Green 計劃完成 Oak 程式設計語言、類庫以及 Green 作業系統的研發。
1992 年 11 月,Green 計劃轉化成 Sun 的全資子公司——FirstPerson 有限公司,準備大幹一場。
但當他們拿這個產品對外進行商業合作時,卻屢屢碰壁。有線電視業界覺得 FirstPerson 平臺給了使用者過多的控制權,拒絕同 FirstPerson 合作。
FirstPerson 意識到自己在電視工業領域沒有前景,於是把公司並回到 Sun。
隨著網際網路和瀏覽器的出現,James Gosling 團隊敏銳的意識到,網際網路在向高度遠端互動的方向上演變。
這個方向正是他們在做有線電視網中看到的,因此他們決定改變努力的目標,將 Green 計劃中的技術應用到全球資訊網上。
1994 年秋,團隊完成第一個 Oak 語言的網頁瀏覽器:WebRunner,並獲得高層的一致好評。
Java 取名那些事兒
由於 Oak 商標被一家顯示卡製造商註冊,於是將 Oak 更名為 Java。Java 得名於印度尼西亞爪哇島,這個地方因盛產咖啡而聞名。
Java 語言體系裡也有很多和咖啡相關的東西。
比如 Java 原始碼編譯出的二進位制檔案 (.class 檔案),如果你用十六進位制編輯器開啟,會發現最前面的 32 位顯示為 CA FE BA BE,也就是片語 CAFE BABE(咖啡屋寶貝)。
以下是我將 Demo.java 檔案編譯成 Demo.class 檔案後,用網站工具看到的內容,感興趣的同學可以親自試下。
public class Demo{
}
(附)檔案十六進位制檢視網站:67tool.com/details/wjsljzck
再比如,Java 語言中的許多庫類名稱和咖啡有關,像 JavaBeans(咖啡豆)、NetBeans(網路豆)以及 ObjectBeans(物件豆)等等。SUN 和 JAVA 的標識也是一杯正冒著熱氣的咖啡。
Java 初創期
1995 年初,Sun 對外發布 Java 語言,並提供免費下載,放在網際網路上向所有人公開。本次的 Java 釋出版本為 JDK BETA。
JDK 全稱 Java Development ToolKit,指 Java 語言開發工具包。
同時對外發布可在網頁中執行 Java 程式(也叫 Java Applet)的網頁瀏覽器——WebRunner,並將其更名為 HotJava。
與此同時,如日中天的網景也決定讓旗下的瀏覽器對 Java 進行支援。
隨後的幾個月,Java 引爆網際網路,數萬人訪問 Sun 官網,下載 Java 語言。網際網路上立即出現數不清的 Java Applet,演示著小動畫、小遊戲等。
為了方便開發者能夠快速開發出複雜的應用程式,Sun 獨立出一條 Java 業務線,專門開發 Java 技術。
1996 年 1 月,Sun 釋出 JDK 1.0。這個版本整合了 Java 執行環境和開發工具。
1997 年 2 月,Sun 釋出 JDK 1.1。這個版本增加 JDBC、反射等能力。
Java 的出現,讓網際網路的網頁動了起來。但隨著 Adobe 公司 Flash 的流行,這款無須任何程式語言知識,就能做出各種動畫的軟體,逐步侵蝕了 Java 在瀏覽器端的地位。
有了 Flash 還用 Java 幹嘛?Java 存在的意義是什麼?Java 定位的問題一直深深困擾著 Sun。
直到 1998 年 12 月,Sun 釋出第二代 Java 企業平臺,Java 版本為 JDK 1.2,這是 Java 第一個里程碑式的版本。
該版本引入集合框架,Java 基礎類庫等能力,同時釋出了 JSP/Servlet、EJB 等企業平臺規範。
1999 年 6 月,Sun 釋出 Java 的三個版本:J2SE、J2EE 和 J2ME。
- J2SE(Java 2 Platform, Standard Edition):Java 的標準版,用於普通 PC 應用的開發,是 Java 技術的核心與基礎,也是 J2ME 和 J2EE 程式設計基礎。
- J2EE(Java 2 Platform, Enterprise Edition):Java 的企業版,用於企業級應用開發。
- J2ME(Java 2 Platform, Micro Edition):Java 的微型版,用於嵌入式裝置及消費類電器的開發。
可以看到,Sun 已經很明確 Java 的定位了,就是向 PC 、企業和移動三個方向發展。
JDK 1.2 影響深遠,Java 發生了很多革命性的變化,並且它的很多能力和規範沿用至今。至此,Sun 時代 Java 的初創期結束,進入了飛速發展的階段。
Java 發展期
2000 年 5 月,J2SE 1.3 釋出。該版本將 Hotspot 作為 Java 的預設虛擬機器實現。
同期 Servlet 規範開始流行,伴隨著網際網路的興起,同其他 MVC 框架,成為 Web1.0 的網紅。
2002 年 2 月,J2SE 1.4 釋出。該版本的 Java 已經相對成熟,它提供了完備的語言特性,像 NIO、正規表示式和 XML 處理器等。
與此同時,基於 Java 語言的開源框架:Struts、Hibernate、Spring 以及大量企業應用伺服器比如 WebLogic、JBoss 等相繼湧現,這讓 Java 語言繼續飛速發展。
2004 年 9 月,J2SE 1.5 釋出。這是 Java 第二個里程碑式的版本,為了表示這個版本的重要性,J2SE 1.5 更名為 J2SE 5.0。
該版本增加泛型、for-each 迴圈、自動裝箱和拆箱、列舉、可變引數、靜態匯入、註解、併發包等。
2005 年,Sun 將 Java 的三個版本更名為 Java SE、Java EE 和 Java ME。J2SE 5.0 也被更名為Java SE 5。
2006 年 12 月,Java SE 6 釋出。該版本在語言語法改進不多,但在虛擬機器內部做了大量改進,成為相對成熟穩定的一個版本。於是,很多企業都以這個版本作為 Java 開發版本來使用。
同年 Sun 做了一個偉大的決定,將 Java 開源。通過 OpenJDK 計劃,將 Java 虛擬機器、Java 編譯器和 Java 類庫以 GPL 公開。
至此,Java 的生態初具規模,Java 的授權使用方式也很明確,Sun 時代 Java 的發展期結束,正走向它的成熟穩定。
Java 穩定期
2009 年,Oracle 收購 Sun,Java 由 Oracle 繼續維護。Java 的 Sun 時代終結,正式進入 Oracle 時代。
2011 年 7 月,Oracle 釋出 Java SE 7,主要特性是 NIO2 和 Fork/Join 併發包。
2014 年 3 月,Oracle 釋出Java SE 8(LTS),這是 Java 第三個里程碑版本,也是長期(一般 3~5 年)支援的一個版本。
該版本不僅引入 Lambda 表示式支援了函數語言程式設計能力,而且還增加了很多新的語言特性,比如 Streams,Date/Time API,集合的平行計算等。
Java SE 8 像 Java SE 6 一樣,被很多企業作為開發版本來使用。尤其是新的 Java 應用,當然也有企業會選擇把 Java 6 應用升級到 Java 8 應用。
2017 年 9 月,Oracle 釋出 Java SE 9,該版本最大特徵就是模組化。
2018 年 3 月,Oracle 釋出 Java SE 10,該版本新增區域性型別推斷 var 等特性。
2018 年 9 月,Oracle 釋出 Java SE 11(LTS),這是在 Java SE 8 之後又一個長期支援的版本,該版本開始支援 ZGC。
由於 Java SE 8 逐漸停止維護更新,再加上 Java SE 11 各種優秀的特性,而且是長期支援版本,預測未來很多企業將會使用 Java SE 11 作為開發版本來使用。
從這一年開始,Oracle 也宣佈,此後 Java 保持每半年一個大版本的更新。
Java 極簡編年史
我們再來看看 Java SE 的歷史:
- 1995.5: JDK Beta
- 1996.1: JDK 1.0
- 1998.12: JDK 1.2
- 2000.5: J2SE 1.3
- 2002.2: J2SE 1.4
- 2004.9: J2SE 5.0
- 2006.12: Java SE 6
- 2011.7: Java SE 7
- 2014.3: Java SE 8(LTS)
- 2017.9: Java SE 9
- 2018.3: Java SE 10
- 2018.9: Java SE 11(LTS)
- 往後每半年更新一個大版本
本作品採用《CC 協議》,轉載必須註明作者和本文連結