Java™ 程式語言的歷史
1995 年 5 月 23 日,John Gage,Sun Microsystems 科學辦公室主任,以及Marc Andreesen,Netscape 的聯合創始人兼執行副總裁,在 SunWorldTM 的觀眾面前宣佈,Java 技術並非神話,它將被納入Netscape Navigator。[1]
當時,Java 的總人數不到 30 人。[1] 這個團隊將在接下來的十年中塑造未來,沒有人知道未來會發生什麼。從在火星上執行無人駕駛車輛到成為大多數消費電子產品的執行環境,例如有線電視機頂盒、VCR、烤麵包機和PDA,[2] Java 已經走過了漫長的道路,從它的起源開始。讓我們看看它是如何開始的。
在 Java 成為程式語言之前,C++ 是該行業的主導力量。Java 建立者的主要目標是創造一種語言,可以解決 C++ 提供的大部分功能,同時擺脫早期語言中的一些繁瑣任務。
從 1972 年到 1991 年,計算機硬體經歷了效能和價格革命。效能更好、速度更快的硬體以越來越低的價格提供,對大型複雜軟體的需求呈指數級增長。為了滿足這種需求,發明了新的開發技術。
C 語言由Dennis Ritchie 於 1972 年開發,用了十年時間成為 PC 和類似平臺上程式設計師中最流行的語言(其他語言,如 COBOL 和 FORTRAN,主導大型機市場)。但是,隨著時間的推移,程式設計師發現用 C 語言程式設計變得很乏味,因為它的結構語法很繁瑣。[3] 雖然人們試圖解決這個問題,但後來才引入了一種新的開發理念,叫做面向物件程式設計 (OOP)。透過 OOP,人們可以編寫可以重複使用的程式碼,而無需一遍又一遍地重寫程式碼。1979 年,Bjarne Stroustrup 開發了 C++,它是對 C 語言的擴充套件,其中包含 OOP 基本原理和功能。Sun 透過銷售 Java 企業系統 等專業產品的許可證來從 Java 中獲利。

1990 年 12 月,一個專案在幕後啟動,旨在建立一種程式設計工具,可以取代 C 和 C++ 程式語言。工程師Patrick Naughton 對 Sun 的 C++ 和 C API (應用程式程式設計介面) 和工具的狀態感到非常沮喪。當他考慮轉向NeXT 時,他得到了一個參與新技術的機會,隱形專案開始了,除了他之外沒有人知道。
當James Gosling 和 Mike Sheridan 加入 Patrick 時,這個隱形專案後來被命名為綠色專案。[1] 當綠色專案開始時,參與該專案的工程師開始更清楚地瞭解該專案的未來。它不再旨在創造一種比現有語言更強大的新語言,而是旨在針對計算機以外的裝置。
該專案由 13 人組成,他們在加州門洛帕克 Sand Hill Road 上的一間小辦公室開始工作。這個團隊後來被稱為綠色團隊。他們參與的專案由 Sun Microsystems 委託,以預測和規劃計算領域的“下一波浪潮”。對於該團隊來說,這至少意味著一個重要趨勢,即數字控制的消費裝置和計算機的融合。[1]
團隊開始考慮用一個更好的版本,一個更快的版本,一個更靈敏的版本來代替 C++。但是他們到目前為止還沒有想到的是,他們所追求的語言必須是為資源有限的嵌入式系統開發的。一個嵌入式系統是一個規模很小的計算機系統,只要求其設計中包含很少的功能。對於這樣的系統,C++或任何後繼者似乎都太大了,因為當時所有語言都需要比預期更大的佔位符。因此,團隊必須以不同的方式思考,才能解決所有這些問題。
Sun Microsystems 的聯合創始人 Bill Joy 在一篇名為Further 的論文中,為 Sun 的工程師設想了將 Mesa 和 C 的強大功能結合起來的語言。Gosling 開始收集想法,開始著手改進 C++,並將其命名為“C++ ++ --”,這是一個關於該語言名稱進化結構的雙關語。++ 和 -- 分別代表新增和刪除內容。他很快就放棄了這個名字,並將其稱為Oak[1],以他辦公室外的樹木命名。
| 姓名 | GT | FP | JP | 詳細資訊 |
|---|---|---|---|---|
| Lisa Friendly | FirstPerson 員工和 Java 產品組成員 | |||
| John Gage | Sun Microsystems 科學辦公室(主任) | |||
| James Gosling | Java 技術的首席工程師和主要架構師 | |||
| Bill Joy | Sun Microsystems 的聯合創始人兼副總裁;UNIX® 作業系統伯克利版本的首席設計師 | |||
| Jonni Kanerva | Java 產品組員工,Java FAQ1 的作者 | |||
| Tim Lindholm | FirstPerson 員工和 Java 產品組成員 | |||
| Scott McNealy | Sun Microsystems 的董事長、總裁兼執行長 | |||
| Patrick Naughton | Green Team 成員,FirstPerson 聯合創始人 | |||
| George Paolini | Sun Java 軟體部門的企業營銷(主任) | |||
| Kim Polese | FirstPerson 產品營銷 | |||
| Lisa Poulson | Java 技術的公共關係總監(博雅公關) | |||
| Wayne Rosing | FirstPerson 總裁 | |||
| Eric Schmidt | 前 Sun Microsystems 首席技術官 | |||
| Mike Sheridan | Green Team 成員 |
一個想法的消亡,另一個想法的誕生
[edit | edit source]到目前為止,Oak 專案取得了重大進展,但到了 1993 年,人們看到了機頂盒、互動式電視和 PDA 的消亡。這是一次徹底的失敗,迫使發明者重新思考他們的想法。只有奇蹟才能讓這個專案取得成功。而這樣的奇蹟正在等待人們的期待。
美國國家超級計算應用中心(NCSA)在去年剛剛釋出了其新的商業網際網路網路瀏覽器。該團隊現在將重點轉移到了他們認為“下一波”計算將出現的地方——網際網路。然後,團隊深入研究了建立相同可嵌入技術的領域,以便在網路瀏覽器空間中使用它,將其稱為applet——一個小應用程式。考慮到所有這些因素,該團隊建立了一個列表,其中包含了針對 C++ 問題的特性。在他們看來,這個專案應該...
- ... 應該是簡單的,並從中收集經過測試的基礎知識和早期語言中的特性,
- ... 具有與語言捆綁在一起的基本和高階功能的標準 API 集,
- ... 擺脫需要直接操作硬體(在本例中為記憶體)的概念,以使語言安全,
- ... 獨立於平臺,並且可以為每個平臺編寫一次(產生了WORA 習語),
- ... 能夠開箱即用地操作網路程式設計,
- ... 能夠嵌入到網路瀏覽器中,以及...
- ... 能夠讓一個程式同時執行多個任務,並同時執行多個操作。
該團隊現在需要一個合適的標識,他們決定將他們建立的新技術命名為Java,為網際網路繁榮 ushering a new generation of products. 這個專案的一個副產品是一個名為 "Duke" 的卡通人物,由 Joe Parlang 建立,後來成為它的標識。
最終在 SunWorldTM 大會上,Andreesen 向大眾展示了這項新技術。隨著網際網路興趣和宣傳的爆發,Java 迅速獲得了廣泛認可,人們對它成為瀏覽器和消費類應用程式的主要軟體的期望越來越高。[2]
最初 Java 是 Sun Microsystems 的財產,但後來它被髮布為開源軟體;“Java”一詞是 Sun Microsystems 的商標。Sun 於 2006 年 11 月釋出了其 HotSpot 虛擬機器和編譯器的原始碼,並於 2007 年 5 月釋出了大多數類庫的原始碼。有些部分缺失,因為它們屬於第三方,而不是 Sun Microsystems。釋出的部分是在GNU 通用公共許可證條款下發布的,這是一種自由軟體許可證。
版本
[edit | edit source]與 C 和 C++ 不同,Java 的發展相當近。在這裡,我們將快速回顧一下 Java 隨著時間的推移所經歷的發展路徑。

初始釋出(1.0 版和 1.1 版)
[edit | edit source]Java 最初於 1996 年釋出,面向Solaris、Windows、Mac OS Classic 和Linux。Java 最初作為 Java 開發工具包 1.0(JDK 1.0)釋出。它包括 Java 執行時(虛擬機器和類庫),以及開發工具(例如,Java 編譯器)。後來,Sun 還提供了一個僅執行時的軟體包,稱為 Java 執行時環境(JRE)。但是,第一個名字仍然存在,因此人們通常用其 JDK 版本來指代特定版本的 Java(例如,JDK 1.0)。
Java 2(1.2 版)
[edit | edit source]1.2 版於 1998 年釋出,是對先前版本的快速修復,標誌著 Java 的新起點。1.2 版及更高版本的 JDK 通常也被稱為Java 2。例如,JDK 1.4 的官方名稱是Java(TM) 2 Platform, Standard Edition 版本 1.4。
- 主要變化包括
- 重寫事件處理(新增事件監聽器)
- 更改執行緒同步
- 引入 JIT——即時編譯器
Kestrel(Java 1.3)
[edit | edit source]於 2000 年 5 月 8 日釋出。最顯著的變化是
- 包含 HotSpot JVM(HotSpot JVM 最初於 1999 年 4 月為 J2SE 1.2 JVM 釋出)
- RMI 被修改為支援與 CORBA 的可選相容性
- JavaSound
- Java 命名和目錄介面 (JNDI) 包含在核心庫中(以前作為擴充套件提供)
- Java 平臺偵錯程式體系結構 (JPDA)
- 合成代理類
Merlin(Java 1.4)
[edit | edit source]Java 1.4 於 2002 年 2 月 6 日釋出,透過擴充套件語言功能和可用 API,提高了程式設計師的生產力
- 斷言
- 正則表示式
- XML 處理
- 加密和安全套接字層 (SSL)
- 非阻塞 I/O (NIO)
- 日誌記錄
Tiger(1.5.0 版;Java SE 5)
[edit | edit source]於 2004 年 9 月釋出
- 主要變化包括
- 泛型——為集合提供編譯時型別安全:並消除強制轉換的繁瑣操作。
- 自動裝箱/拆箱——消除在基本型別(如 int)和包裝型別(如 Integer)之間手動轉換的繁瑣操作。
- 增強型 for——使用集合縮短 for 迴圈。
- 靜態匯入——允許您匯入類的所有靜態部分。
- 註解/元資料 - 使工具能夠從原始碼中的註解生成程式碼和部署描述符。這將導致一種“宣告式”程式設計風格,程式設計師說明應該做什麼,而工具則發出執行該操作的程式碼。可以透過原始碼解析或使用 Java 5 中新增的額外反射 API 來檢查註解。
- JVM 改進 - 現在大多數執行時庫被對映到記憶體中作為記憶體映像,而不是從一系列類檔案載入。現在,大部分執行時庫將在多個 JVM 例項之間共享。
於 2006 年 12 月 11 日釋出。
Java SE 6 中的新功能
- Web 服務 - 對編寫 XML Web 服務客戶端應用程式的一流支援。
- 指令碼 - 您現在可以混合使用 JavaScript 技術原始碼,這對於原型設計很有用。當您擁有具有各種技能的團隊時,這也很有用。更高階的開發人員可以插入他們自己的指令碼引擎,並將他們喜歡的指令碼語言與 Java 程式碼混合使用,以滿足他們的需求。
- 資料庫 - 在開發資料庫應用程式時,不再需要查詢和配置您自己的 JDBC 資料庫。開發人員還將獲得更新的 JDBC 4.0,這是一個經過充分使用的 API,其中包含許多重要的改進,例如對 XML 作為 SQL 資料型別的特殊支援,以及將二進位制大型物件 (BLOB) 和字元大型物件 (CLOB) 更好地整合到 API 中。
- 更多桌面 API - GUI 開發人員獲得了許多新技巧,例如廣受歡迎的最新加入的 SwingWorker 實用程式,可以幫助您在 GUI 應用程式中進行執行緒操作、JTable 排序和過濾,以及一個用於快速啟動螢幕的新工具,以安撫不耐煩的使用者。
- 監控和管理 - 這裡最重要的是,您不需要對啟動進行任何特殊操作,就可以使用 Java SE 平臺中的任何監控和管理工具進行按需連線。
- 編譯器訪問 - 實際上是針對為 Java 開發建立工具的人員以及需要按需生成大量類的框架(如 JavaServer Pages (JSP) 或個人主頁構建工具包 (PHP) 引擎),編譯器 API 為 javac 打開了程式訪問許可權,以便進行動態生成的 Java 程式碼的程序內編譯。編譯器 API 不直接面向日常開發人員,而是面向那些被尖叫的內心極客震耳欲聾的人,捲起袖子試一試。而我們其他人將很樂意從使用此 API 的工具和改進的 Java 框架中受益。
- 可插拔註解允許程式設計師編寫註解處理器,以便它可以在 javac 編譯之前語義上分析您的程式碼。例如,您可以編寫一個註解處理器,用於驗證您的程式是否遵守命名約定。
- 桌面部署 - 最終,Java SE 6 將 Java 外掛技術和 Java WebStart 引擎統一起來,這很有道理。Java WebStart 應用程式的安裝得到了急需的改造。
- 安全 - Java SE 6 透過提供各種新的方法來訪問平臺本機安全服務,簡化了安全管理員的工作,例如 Microsoft Windows 上的本機公鑰基礎設施 (PKI) 和加密服務,用於安全身份驗證和通訊,Java 通用安全服務 (Java GSS) 和 Kerberos 服務,用於身份驗證,以及訪問 LDAP 伺服器,用於驗證使用者身份。
- -lities:質量、相容性、穩定性 - 錯誤修復…
於 2011 年 7 月 28 日釋出。
Java 7 的功能新增包括
- 對動態語言的 JVM 支援,遵循目前在多語言虛擬機器上進行的原型設計工作
- 壓縮的 64 位指標在 Java 6 中使用 -XX:+UseCompressedOops 可用
- 小的語言更改(在名為 Coin 的專案下分組)
- switch 中的字串
- try 語句中的自動資源管理
- 改進泛型例項建立的型別推斷
- 簡化的可變引數方法宣告
- 二進位制整數文字
- 允許在數字文字中使用下劃線
- 捕獲多個異常型別以及透過改進的型別檢查重新丟擲異常
- JSR 166 下的併發實用程式
- 新的檔案 I/O 庫,以增強平臺獨立性並新增對元資料和符號連結的支援。新包是 java.nio.file 和 java.nio.file.attribute
- 對橢圓曲線密碼演算法的庫級支援
- 用於 Java 2D 的 XRender 管道,它可以改進對現代 GPU 特定功能的處理
- 用於最初計劃在 Java 版本 6u10 中釋出的圖形功能的新平臺 API
- 對新網路協議(包括 SCTP 和 Sockets Direct Protocol)的增強庫級支援
- 對 XML 和 Unicode 的上游更新
Lambda(Java 的 lambda 函式實現)、Jigsaw(Java 的模組實現)以及 Coin 的一部分被從 Java 7 中刪除。
Java 8 於 2014 年 3 月 18 日釋出,其中包含一些原本計劃用於 Java 7 但後來推遲的功能。
功能開發是按照 JDK 增強提案 (JEP) 來組織的。
- JSR 335、JEP 126:對 lambda 表示式(正式名稱為 lambda 表示式;非正式名稱為閉包)的語言級支援,在 Lambda 專案下,允許在介面中新增方法而不破壞現有的實現。在 Java 社群中一直存在關於是否新增對 lambda 表示式的支援的爭論。支援 lambda 表示式還可以提高對元素流的功能式操作的效能,例如對集合進行 MapReduce 風格的轉換。預設方法允許 API 的作者向介面新增新方法,而不會破壞使用它的舊程式碼。雖然這不是他們的主要目的,但預設方法也允許行為(但不是狀態)的多重繼承。
- JSR 223、JEP 174:Nashorn 專案,一個 JavaScript 執行時,允許開發人員在應用程式中嵌入 JavaScript 程式碼
- JSR 308、JEP 104:Java 型別上的註解
- 無符號整數算術
- JSR 337、JEP 120:重複註解
- JSR 310、JEP 150:日期和時間 API
- JEP 178:靜態連結的 JNI 庫
- JEP 153:啟動 JavaFX 應用程式(直接啟動 JavaFX 應用程式 JAR 檔案)
- JEP 122:刪除永久代