Java 簡介
1. Java 的歷史
1995 年 5 月 23 日,Sun Microsystems
公司宣布 Java 語言誕生, 當(dāng)時使用 Java 的總?cè)藬?shù)還不到 30 人,可能包括 Java 語言之父詹姆斯·高斯林
在內(nèi)的大多數(shù)聯(lián)合創(chuàng)始人都無法預(yù)想,Java 在未來的二十年間,居然會給互聯(lián)網(wǎng)乃至我們的生活帶來如此深遠(yuǎn)的影響。
目前 Java 提供以下三個版本:
-
Java Platform, Enterprise Edition(Java EE:Java 平臺企業(yè)版);
-
Java Platform, Standard Edition(Java SE:Java 平臺標(biāo)準(zhǔn)版);
-
Java Platform, Micro Edition(Java ME:Java 平臺微型版)。
2006 年,SUN 公司在 JavaOne 大會上,宣布在 GNU 通用公共協(xié)議(GPL)的構(gòu)架下向開源世界貢獻(xiàn) Java 平臺,這次開放的 Java 版本包括了其標(biāo)準(zhǔn)版(Standard)、微型版(Micro)以及企業(yè)版(Enterprise)。這是一個具有 “歷史性意義” 的改變。

2. 語言特性
Java 語言的誕生,重新定義了面向?qū)ο缶幊蹋∣OP)
。Java 語言的創(chuàng)建之初,就定下了以下幾個目標(biāo):
-
簡單易學(xué),并且面向?qū)ο螅?/p>
-
必須健壯且安全;
-
擺脫平臺的依賴性;
-
高性能執(zhí)行;
-
必須是可解釋的,多線程的,動態(tài)的。
面向?qū)ο螅∣bject Oriented)指的是一種編程方法。面向?qū)ο蟮闹饕枷胧牵簢@著我們所操縱的 “事物”(即對象)來設(shè)計軟件。 計算機(jī)硬件的發(fā)展為軟件技術(shù)的發(fā)展提供了更好的土壤,為了讓大型軟件項目易于管理,降低開發(fā)和維護(hù)的成本,面向?qū)ο蠹夹g(shù)也就應(yīng)運而生。為了了解面向?qū)ο蠹夹g(shù)的誕生原因,我們下面來介紹幾種比較具有代表性的軟件技術(shù)。
2.1.1 匯編語言
匯編語言是軟件技術(shù)的開端,這種語言與機(jī)器語言非常接近,并且可以很容易地轉(zhuǎn)換為可執(zhí)行代碼。使用匯編語言的程序員,必須了解計算機(jī)的詳細(xì)體系結(jié)構(gòu)才能編寫程序。
2.1.2 程序語言
在匯編語言之后,開發(fā)了高級語言,可以使用語言的編譯器(如 gcc
)將高級程序代碼轉(zhuǎn)換為機(jī)器指令。這樣程序員無需再深入了解計算機(jī)硬件的體系結(jié)構(gòu)。為了提高代碼的可復(fù)用性并最大程度地減少 GOTO 指令的使用,引入了面向過程
技術(shù)。雖然簡化了軟件流程控制的創(chuàng)建和維護(hù),但是忽視了數(shù)據(jù)的組織。調(diào)試和維護(hù)許多全局變量的程序,變成了程序員的一場噩夢。
2.1.3 面向?qū)ο笳Z言
在面向?qū)ο蟮恼Z言中,數(shù)據(jù)被抽象地封裝在對象中。特定于對象中的數(shù)據(jù)只能通過該對象來進(jìn)行訪問。這樣,程序就成為了對象之間的一系列交互。Java 語言就是一個純面向?qū)ο蟮恼Z言。
2.2 跨平臺性
我們也許常常聽到一句口號 ——“一次編譯,到處執(zhí)行(write once, run anywhere.)”,這里說的就是 Java 的跨平臺性,我們首先來看下在 c
或 c++
中,代碼是如何在不同平臺運行的:
在 c
或 c++
中,我們首先要將源代碼文件編譯為機(jī)器代碼文件,然后再去執(zhí)行它。這個過程中,機(jī)器代碼文件必須在為其編譯的平臺才能執(zhí)行(這里的平臺指的是 Windows、Linux、Mac OS 等),也就是說,我們的代碼如果希望在多個平臺執(zhí)行,那就必須多次編譯程序。這不僅給程序員帶來了繁瑣的開發(fā)步驟(代碼稍做變更就要重新編譯整個程序),也給程序帶來了更大的漏洞風(fēng)險。當(dāng)代碼已經(jīng)編譯為可執(zhí)行文件時,這個可執(zhí)行文件不能動態(tài)更改,此時需要更改代碼重新編譯,以替換舊的可執(zhí)行文件。
我們來看看 Java
是如何做的吧:
Java 的思想是,將代碼編譯為中間語言
,中間語言是字節(jié)碼,解釋器是 Java 虛擬機(jī)(JVM
)。字節(jié)碼文件可以通用,JVM 是特定于平臺的。如下圖所示:

每一個平臺都需要一個 JVM
,這里 JVM
是實現(xiàn) “到處執(zhí)行” 的關(guān)鍵前提,所以,在 Java 中,我們只需要生成一個字節(jié)碼文件,就可以保證我們編寫的程序在任何平臺都能運行了。
2.3 標(biāo)準(zhǔn)化
在 Java
中,提供了大量的標(biāo)準(zhǔn)化庫,這保證了我們使用統(tǒng)一的接口對程序進(jìn)行控制。
2.4 異常處理
異常處理的老方式是:讓每個函數(shù)返回一個錯誤代碼,調(diào)用者會檢查其返回的內(nèi)容,這樣就導(dǎo)致了代碼中到處都是錯誤碼的校驗,從而讓源碼變得難以閱讀。
在異常處理的新方式中,函數(shù)或方法不再返回錯誤碼,而是以拋出異常的方式來進(jìn)行異常處理,在 Java 中可以使用 catch
關(guān)鍵字來捕獲在 try
語句塊中所發(fā)生的異常。這樣我們無需頻繁通過定義錯誤代碼的方式處理異常,代碼可讀性大大提高。
2.5 動態(tài)類加載
在 Java 中,如果在執(zhí)行階段不需要某個類,那么這個類就不會被編譯為字節(jié)碼。在網(wǎng)絡(luò)編程中,這個特性非常常用。當(dāng)我們不知道將執(zhí)行什么代碼時,程序可以從文件系統(tǒng)或遠(yuǎn)端服務(wù)器加載類。
2.6 自動垃圾回收機(jī)制
在常規(guī)語言(例如 C 和 C++)中,程序員必須確保已分配的內(nèi)存被釋放。防止造成內(nèi)存泄漏的麻煩。
內(nèi)存資源或緩沖區(qū)具有特定的操作模式以獲得最佳性能。一旦緩沖區(qū)中充滿了數(shù)據(jù),就需要在不再使用其內(nèi)容之后將其清除。如果程序員忘記清除其代碼中的內(nèi)容,則內(nèi)存很容易過載。Java 使用自動垃圾收集器來管理對象生命周期中的內(nèi)存。程序員確定何時創(chuàng)建對象,一旦不再使用對象,Java 運行時將負(fù)責(zé)恢復(fù)內(nèi)存。一旦沒有了對對象的引用,則垃圾回收器將自動釋放無法訪問的內(nèi)存。
自動垃圾回收機(jī)制,讓使用 Java 編寫的代碼更加健壯,降低了內(nèi)存泄漏和溢出的風(fēng)險。程序員唯一需要注意的是對象創(chuàng)建的速度。如果應(yīng)用程序創(chuàng)建對象的速度超過了垃圾收集器釋放對象的速度,則可能導(dǎo)致內(nèi)存相關(guān)問題。
3. Java 的版本歷史
Java 的主要發(fā)行版本及其發(fā)行日期如下:
-
JDK 1.0(1996 年 1 月 23 日)
-
JDK 1.1(1996 年 2 月 19 日)
-
J2SE 1.2(1998 年 12 月 8 日)
-
J2SE 1.3(2000 年 5 月 8 日)
-
J2SE 1.4(2002 年 2 月 6 日)
-
J2SE 5.0(2004 年 9 月 30 日)
-
Java SE 6(2006 年 12 月 11 日)
-
Java SE 7(2011 年 7 月 28 日)
-
Java SE 8(2014 年 3 月 18 日)
-
Java SE 9(2017 年 9 月 21 日)
-
Java SE 10(2018 年 3 月 20 日)
-
Java SE 11(2018 年 9 月 25 日)
-
Java SE 12(2019 年 3 月 19 日)
-
Java SE 13(2019 年 9 月 17 日)
-
Java SE 14(2020 年 3 月 17 日)
-
Java SE 15(2020 年 9 月 15 日)
-
Java SE 16(2021 年 3 月 16 日)
4. 名詞解釋
我們將在后續(xù)詳細(xì)介紹如何在不同平臺上安裝 Java,在安裝 Java 之前,我們需要理解兩個名詞,JDK 和 JRE:
-
JRE:Java Runtime Environment (Java 運行時環(huán)境)
-
JDK:Java Development Kit (Java 開發(fā)工具包)
以上兩個名詞是 Java 平臺的兩大重要軟件,他們分別可以幫助用戶運行和開發(fā) Java 程序,JDK 是 JRE 的超集,包含 JRE 的所有內(nèi)容,以及開發(fā)小程序和應(yīng)用程序所需的工具,例如編譯器和調(diào)試器。
簡單來說,我們?nèi)绻胍?Java 語言去開發(fā)應(yīng)用程序,就要在我們的電腦上安裝 JDK。本教程使用最新版本的 Java 16
。
5. 學(xué)習(xí)基礎(chǔ)
學(xué)習(xí)本教程,最好有一定的計算機(jī)基礎(chǔ)知識,熟悉計算機(jī)軟件的下載、安裝等。當(dāng)然,如果你沒有任何基礎(chǔ)知識也不必?fù)?dān)心,本教程會盡量使用通俗易懂的語言來講解知識點。
6. 小結(jié)
在大多數(shù)人看來,Java 語言已經(jīng)非常完美,但是,Java 語言并非沒有缺陷,Java 語言缺少硬件特定的數(shù)據(jù)類型,也沒有能夠指向任意地址的指針或編程方法之類的功能。盡管這些功能有可能被程序員誤用或濫用,但不得不承認(rèn)它們是強(qiáng)大的工具。
在本節(jié)中,我們對 Java 語言的歷史以及主要特性有了一個初步的了解,小伙伴們是不是已經(jīng)迫不及待,要更加深入了解 Java 了呢?那么在下一小節(jié),我們將了解如何在自己的電腦上安裝 Java。