學習 Java 語言,你必須知道的 Java 簡史

2021-03-02 程式設計師書單

閱讀本文你將收穫:

為什麼要學習 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{

}

(附)文件十六進位查看網站:https://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 的歷史:

相關焦點

  • Java基礎學習心得筆記
    面向過程就是把你的代碼封裝成函數,然後依次去做一件事情,面向過程是把你要做的事情抽象成對象,告訴對象去做。所以要想學好java入門,必須知道類和對象的概念。類是對生活中事物的抽象描述,比如人類,動物類,交通工具類;對象即是對類的具體實例化,比如張三是人,貓是動物,飛機是交通工具(對象類)。
  • 成都哪個java培訓學校好?轉行Java開發該如何學習?
    很多沒有接觸過java的朋友,在即將來臨的2020年可能想要學習java,但苦於不知道從何處入手,怎麼學習,因為java語言涉及的東西太多了,不是簡簡單單就能學會的,那麼,應該怎麼學習java呢?成都達內小編分享幾個學習步驟供大家參考一下!
  • 你必須掌握的 21 個 Java 核心技術!
    而寫這篇文章的目的是想總結一下自己這麼多年來使用java的一些心得體會,希望可以給大家一些經驗,能讓大家更好學習和使用Java。這次介紹的主要內容是和J2SE相關的部分,另外,會在以後再介紹些J2EE相關的、和Java中各個框架相關的內容。
  • JAVASE -- 語言概述和JAVA
    計算機語言:人與計算機交流的方式。如果人要與計算機交流,那麼就要學習計算機語言。計算機語言有很多種,如:C,C++,Java等。這裡,我們選擇其中的一種:Java語言。,Java也一樣,既然是規則,那麼知道其如何使用就可以了。
  • C語言和Java語言學習哪個更好呢?
    如果你想學習開發語言作為零基礎新手是學習c語言還是學習java語言呢?這兩種語言中哪一種更適合初學者,哪一種更適合在學習後找到工作?下面給大家介紹一下新手學習C語言還是學習java語言好?C語言是一種抽象的,面向對象的通用程式語言,廣泛應用於底層開發。Java是一種面向對象的程式語言, 既吸收了C語言的優點,又摒棄了C語言中難以理解的多重繼承和指針概念,具有功能強大,使用方便,適合於Internet應用的開發。所以Java語言比C語言應用程式更廣泛,比C語言更容易學習。
  • Python和Java語言,新手應該先學哪個
    java呢,還是學習python?今天我就給大家說道說道,關於這兩個語言的選擇問題。我先表明下自己的觀點,java和python這兩門語言,都要學習,但是,要有先後順序。強烈推薦先學習java。java是個嚴謹、高效的程式語言,出道20餘年,在編程兵器排行榜上,常年佔據前三。
  • 零基礎學Java的幾大問題:我適合自學Java嗎?Java學習成本?Java 真的很難嗎?
    Java是一門永不言敗的開發語言,隨著軟體行業的興盛,現在學習java的人員也是越來越多了,但是想要學好java的話自學是沒有那麼容易的事情。特別是對於零基礎的學員來,所以對於零基礎的學員來說都是要參加java培訓機構才是最合適的學習方式。很多的零基礎學員都會問,零基礎學習java真的很難嗎?要回答這個問題,我們應該從多方面來回答。
  • Java學習心得--給初學者的一些建議
    作為最熱門的程序開發語言之一,Java在網際網路領域中的地位無需贅言。熱門也帶來了高薪和大量的工作機會,對那些準備通過學習Java來改變自己命運的學子來說,以下好的學習方法和經驗是非常值得借鑑的。在筆者看來,學習一門語言必備的幾個要點在於,看,練,悟。
  • 這樣學習Java,才能找到一份Java開發的工作。不要盲目的學
    開篇文章,給自學的人掃掃盲區,很多人自學java都是錯誤的方式,導致最後浪費時間。越學越迷茫。從事Java八年,希望我的建議可以幫助到每個在學習java的人。我發現很多人在學習java的時候還在看很老的視頻,目前java已經出了java12,所以就是我們學習的內容要是最新的。這行的技術更新的比較快。所以三四年前的視頻就沒有必要看了。所以首先就得明白自己應該學習什麼最新的技術體系。根據公司的目前的技術配置來學習。衡量一下自己的水平。什麼專業,什麼學歷,是否學過編程。
  • 動力節點Java學院2021年Java學習路線圖最新出爐啦
    Java在程式語言排行榜中一直牢牢佔據榜首位置,幾乎所有的大中型網際網路的應用系統在伺服器端開發首選都是Java編程,正因如何吸引這不少年輕人投入該行業,Java雖不想其它程式語言那麼複雜,但是知識體系還是很龐大的,因此想要學好並非容易之事,不少想要跨入Java編程行業的同學們通過網絡搜索各式各樣的學習資料
  • 8月程式語言排行榜:C語言擊敗Java 排名第一,新手學C語言還是Java?
    這兩年,程式語言排行榜榜首位置,不是C語言,就是Java。以下為具體榜單信息:TIOBE 8 月 TOP 10 程式語言而由於Java的平臺無關性,我們也可以使用java開發嵌入式的程序,所以如果你學好Java,也可以從事嵌入式物聯網行業。根據職友集數據顯示,嵌入式開發工程師的平均薪資為16460元每月。雖然Java排行第二,但目前的招聘崗位比上個月多很多。隨著經濟好轉,之前有用心沉澱技術、儲備技能、調查過市場主流需求的朋友,可以操練起來了。
  • 學習java這個建議你一定得聽
    學習編程不知道大家有沒有這樣的感受:努力學習了很久,似乎很多知識都知道,但用起來似乎又什麼都不會。為什麼會出現這種現象?我的兩個同學學習Java的經歷我覺得就很能說明這個問題。其中學習方法和理念特別重要,很多時候我們大多數人都樂忠於學習知識,卻很少有人能夠冷靜下來看待學習本身。因為是計算機專業,大學畢業後身邊很多同學都決定未來搞編程,當時畢業市面上最流行的就是java,用人單位要的多,也好找工作,於是我不少同學的方向都是java工程師。但大學計算機學到的知識並不精深。
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    JVM作為java運行的基礎,很難相信對於JVM一點都不了解的人可以把java語言吃得很透。我在面試有超過3年Java經驗的開發者的時候, JVM幾乎就是一個必問的問題了。當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。
  • 學好java,掌握java編程思想很重要!學習java分三步
    浮雲我是一個剛剛畢業的大學生,專業是學的java,但是由於在大學時期貪玩,打遊戲,導致專業技術不過關,因此,在做了一番思想鬥爭過後,我決定了在我所在的城市找了一個培訓學校,所以我也就從頭學習java了。
  • Java開發必須要知道的知識體系
    Java是超高人氣程式語言,擁有跨平臺、面向對象、泛型編程等特性。
  • 2018年學習編程是學習JAVA好還是學習python好?
    2018年世界程式語言熱度排名python首次超出java,很多同學想學習編程,但是選擇哪門語言方面很糾結,過去幾年java一直排名第一,選擇java無話可說,新的熱度是不是會持續下去,Java還那麼吃香嗎?成為選擇的一個就節點。
  • Java 基礎知識總結(一)之Java 概述
    用具體的java 語言代碼把思路體現出來。學習新技術的四點1,該技術是什麼?2,該技術有什麼特點(使用注意):3,該技術怎麼使用。demo4,該技術什麼時候用?test。java 概述1991 年Sun 公司的James Gosling 等人開始開發名稱為 Oak 的語言,希望用於控制嵌入在有線電視交換盒、PDA 等的微處理器;1994 年將Oak 語言更名為Java;Java 的三種技術架構:JAVAEE:
  • Java 學習路線
    我仔細想了一下,雖然我只接觸過 Java 基礎,但是絲毫不影響我對於 Java 學習路線的思考,畢竟網上那麼多資源(知乎、牛客、簡書,學會自己搜索、自己規劃路線)。對於 Java 方向,我只會把我知道的,我看過的推薦出來,希望對於 Java 方向迷茫的同學有所幫助。
  • java能夠幹什麼呢?
    通常會有人問學習java能夠幹什麼?大部分也只知道java能夠編程但是不知道具體能夠幹什麼。首先java作為程式語言排行榜中第一的位置它能夠作為排行榜中的第一位肯定有它的道理,那麼就來看一下吧!火爆高薪的大數據領域,java也能接入,大數據技術都在不同程度使用著java。移動應用開發現如今現在最大的行動裝置作業系統安卓的App開發語言就是java,隨便打開一個App他們就是用的java語言。
  • JAVA與GO語言哪個更容易學?
    一,GO語言的優劣勢Go開發中的痛點編譯慢,失控的依賴,個工程師只是用了一個語言裡面的一部分,程序難以維護(可讀性差、文檔不清晰等),更新的花費越來越長,交叉編譯困難>Go語言的優勢學習曲線容易MGo語言語法簡單,包含了類C語法。