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

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

每一個平臺都需要一個 JVM
,這里 JVM
是實現 “到處執行” 的關鍵前提,所以,在 Java 中,我們只需要生成一個字節碼文件,就可以保證我們編寫的程序在任何平臺都能運行了。
2.3 標準化
在 Java
中,提供了大量的標準化庫,這保證了我們使用統一的接口對程序進行控制。
2.4 異常處理
異常處理的老方式是:讓每個函數返回一個錯誤代碼,調用者會檢查其返回的內容,這樣就導致了代碼中到處都是錯誤碼的校驗,從而讓源碼變得難以閱讀。
在異常處理的新方式中,函數或方法不再返回錯誤碼,而是以拋出異常的方式來進行異常處理,在 Java 中可以使用 catch
關鍵字來捕獲在 try
語句塊中所發生的異常。這樣我們無需頻繁通過定義錯誤代碼的方式處理異常,代碼可讀性大大提高。
2.5 動態類加載
在 Java 中,如果在執行階段不需要某個類,那么這個類就不會被編譯為字節碼。在網絡編程中,這個特性非常常用。當我們不知道將執行什么代碼時,程序可以從文件系統或遠端服務器加載類。
2.6 自動垃圾回收機制
在常規語言(例如 C 和 C++)中,程序員必須確保已分配的內存被釋放。防止造成內存泄漏的麻煩。
內存資源或緩沖區具有特定的操作模式以獲得最佳性能。一旦緩沖區中充滿了數據,就需要在不再使用其內容之后將其清除。如果程序員忘記清除其代碼中的內容,則內存很容易過載。Java 使用自動垃圾收集器來管理對象生命周期中的內存。程序員確定何時創建對象,一旦不再使用對象,Java 運行時將負責恢復內存。一旦沒有了對對象的引用,則垃圾回收器將自動釋放無法訪問的內存。
自動垃圾回收機制,讓使用 Java 編寫的代碼更加健壯,降低了內存泄漏和溢出的風險。程序員唯一需要注意的是對象創建的速度。如果應用程序創建對象的速度超過了垃圾收集器釋放對象的速度,則可能導致內存相關問題。
3. Java 的版本歷史
Java 的主要發行版本及其發行日期如下:
-
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. 名詞解釋
我們將在后續詳細介紹如何在不同平臺上安裝 Java,在安裝 Java 之前,我們需要理解兩個名詞,JDK 和 JRE:
-
JRE:Java Runtime Environment (Java 運行時環境)
-
JDK:Java Development Kit (Java 開發工具包)
以上兩個名詞是 Java 平臺的兩大重要軟件,他們分別可以幫助用戶運行和開發 Java 程序,JDK 是 JRE 的超集,包含 JRE 的所有內容,以及開發小程序和應用程序所需的工具,例如編譯器和調試器。
簡單來說,我們如果想要利用 Java 語言去開發應用程序,就要在我們的電腦上安裝 JDK。本教程使用最新版本的 Java 16
。
5. 學習基礎
學習本教程,最好有一定的計算機基礎知識,熟悉計算機軟件的下載、安裝等。當然,如果你沒有任何基礎知識也不必擔心,本教程會盡量使用通俗易懂的語言來講解知識點。
6. 小結
在大多數人看來,Java 語言已經非常完美,但是,Java 語言并非沒有缺陷,Java 語言缺少硬件特定的數據類型,也沒有能夠指向任意地址的指針或編程方法之類的功能。盡管這些功能有可能被程序員誤用或濫用,但不得不承認它們是強大的工具。
在本節中,我們對 Java 語言的歷史以及主要特性有了一個初步的了解,小伙伴們是不是已經迫不及待,要更加深入了解 Java 了呢?那么在下一小節,我們將了解如何在自己的電腦上安裝 Java。