Java誕生到現(xiàn)在已經(jīng)有20多年了,但是Java仍然是非常熱門的編程語言之一,很多平臺中使用Java開發(fā)。Java語言的熱度,或許這也是很多人選擇學(xué)習(xí)Java的主要原因。
Java語言歷史
在正式學(xué)習(xí)Java語言之前,有必要先來了解一下Java的歷史。1990年底美國Sun公司[1]成立了一個叫做Green的項目組,該Green項目主要目標(biāo)是為消費類電子產(chǎn)品開發(fā)一種分布式系統(tǒng),使之能夠操控電冰箱、電視機等家用電器。
消費類電子產(chǎn)品種類很多,包括掌上電腦(個人數(shù)字助理,Personal Digital Assistant,簡稱PDA)、機頂盒、手機等等,這些消費類電子產(chǎn)品所采用的處理芯片和操作系統(tǒng)基本上都是不相同的,存在跨平臺等問題。開始Green項目組考慮采用C++語言來編寫消費類電子產(chǎn)品的應(yīng)用程序,但是C++語言過于復(fù)雜、龐大,而且安全性差。于是他們設(shè)計并開發(fā)出一種新的語言——Oak(橡樹)。Oak這個名字來源于Green項目組辦公室窗外的一棵橡樹。由于Oak在進行注冊商標(biāo)時已經(jīng)被注冊,他們需要為這個新語言取一個新的名字,有一天,幾位項目的成員正在咖啡館喝著Java(爪哇)咖啡,其中一個人靈機一動說就叫Java怎么樣?馬上得到了其他人的同意,于是這個新的語言取名為Java。
Sun在1996年發(fā)布了Java 1.0,但是Java 1.0開發(fā)的應(yīng)用速度很慢,并不適合做真正的應(yīng)用開發(fā),直到Java 1.1后速度有了明顯的提升。Java設(shè)計之初是為消費類電子產(chǎn)品開發(fā)應(yīng)用,但是真正使Java流行起來是在互聯(lián)網(wǎng)上的Web應(yīng)用程序,上個世紀(jì)90年代正在互聯(lián)網(wǎng)發(fā)展起步階段,互聯(lián)網(wǎng)上設(shè)備差別很大,需要應(yīng)用程序能夠跨平臺運行,那么Java語言具有“一經(jīng)編寫到處運行”的跨平臺能力。
到本書編寫時,Oracle公司已經(jīng)發(fā)布了Java 8,Java 9將在2017年秋季發(fā)布。Java
在20多年發(fā)展過程中,與時俱進,為了適應(yīng)時代的需要,經(jīng)歷過兩次重大的版本升級,一個是Java 5,Java 5提供了泛型等重要的功能;另一個是Java 8,Java 8中提供了Lambda表達式和枚舉類等重要的功能。
Java語言特點
Java語言能夠流行起來,并長久不衰,得益于Java語言有很多優(yōu)秀的關(guān)鍵特點。這些特點包括:簡單、面向?qū)ο蟆⒎植际健⒔Y(jié)構(gòu)中立、可移植、解釋執(zhí)行、健壯、安全、高性能、多線程和動態(tài)。下面詳細(xì)解釋一下:
1. 簡單
Java設(shè)計目標(biāo)之一就是能夠方便學(xué)習(xí),使用簡單。由于當(dāng)初C++程序員很多,介紹C++語言的書籍也很多,所以Java語言的風(fēng)格設(shè)計成為類似于C++語言風(fēng)格,但Java摒棄了C++中容易引發(fā)程序錯誤的地方,如指針、內(nèi)存管理、運算符重載和多繼承等。一方面C++程序員可以很快遷移到Java;另一方面沒有編程經(jīng)驗的初學(xué)者也能很快學(xué)會Java。
2. 面向?qū)ο?/span>
面向?qū)ο笫荍ava重要的特性。Java是徹底的、純粹的面向?qū)ο笳Z言,在Java中“一切都是對象”。Java完全具有面向?qū)ο笕齻€基本特性:封裝、繼承和多態(tài),其中封裝性實現(xiàn)了模塊化和信息隱藏,繼承性實現(xiàn)了代碼的復(fù)用,用戶可以建立自己的類庫。而且Java采用的是相對簡單的面向?qū)ο蠹夹g(shù),去掉了多繼承等復(fù)雜的概念,只支持單繼承。
3. 分布式
Java語言就是為分布式系統(tǒng)而設(shè)計的。JDK(Java Development Kits,Java開發(fā)工具包)中包含了支持HTTP和FTP等基于TCP/IP協(xié)議的類庫。Java程序可以憑借URL打開并訪問網(wǎng)絡(luò)上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。
4. 結(jié)構(gòu)中立
Java程序需要在很多不同網(wǎng)絡(luò)設(shè)備中運行,這些設(shè)備有很多不同類型的計算機和操作系統(tǒng)。為能夠使Java程序能在網(wǎng)絡(luò)的任何地方運行,Java編譯器編譯生成了與機器結(jié)構(gòu)(CPU和操作系統(tǒng))無關(guān)的字節(jié)碼(byte-code)文件。任何種類的計算機,只要可以運行Java虛擬機,字節(jié)碼文件就可以在該計算機上運行。
5. 可移植
體系結(jié)構(gòu)的中立也使得Java程序具有可移植性。針對不同的CPU和操作系統(tǒng)Java虛擬機有不同的版本,這樣就可以保證相同的Java字節(jié)碼文件可以移植到多個不同的平臺上運行。
6. 解釋執(zhí)行
為實現(xiàn)跨平臺,Java設(shè)計成為解釋執(zhí)行的,即Java源代碼文件首先被編譯成為字節(jié)碼文件,這些字節(jié)碼本身包含了許多編譯時生成的信息,在運行時候Java解釋器負(fù)責(zé)將字節(jié)碼文件解釋成為特定的機器碼進行運行。
7. 健壯
Java語言是強類型語言,它在編譯時進行代碼檢查,使得很多錯誤能夠在編譯期被發(fā)現(xiàn),不至于在運行期發(fā)生而導(dǎo)致系統(tǒng)崩潰。
Java摒棄了C++中指針操作,指針是一種很多強大的技術(shù),能夠直接訪問內(nèi)存單元,但同時也很復(fù)雜,如果指針操控不好,會引起導(dǎo)致內(nèi)存分配錯誤、內(nèi)存泄漏等問題。而Java中則不會出現(xiàn)由指針?biāo)鶎?dǎo)致的問題。
內(nèi)存管理方面C/C++等語言采用手動分配和釋放,經(jīng)常會導(dǎo)致內(nèi)存泄漏,從而導(dǎo)致系統(tǒng)崩潰。而Java 采用自動內(nèi)存垃圾回收機制,程序員不再需要管理內(nèi)存,從而減少內(nèi)存錯誤的發(fā)生,提高了程序的健壯性。
8. 安全
在Java程序執(zhí)行過程中,類裝載器負(fù)責(zé)將字節(jié)碼文件加載到Java虛擬機中,這個過程中由字節(jié)碼校驗器檢查代碼中是否存在著非法操作。如果字節(jié)碼校驗器檢驗通過,由Java解釋器負(fù)責(zé)把該字節(jié)碼解釋成為機器碼進行執(zhí)行,這種檢查可以防止木馬病毒。
另外。Java虛擬機采用的是“沙箱”運行模式,即把Java程序的代碼和數(shù)據(jù)都限制在一定內(nèi)存空間里執(zhí)行,不允許程序訪問該內(nèi)存空間外的內(nèi)存。
9. 高性能
Java編譯器在編譯時對字節(jié)碼會進行一些優(yōu)化,使之生成高質(zhì)量的代碼。Java字節(jié)碼格式就是針對機器碼轉(zhuǎn)換而設(shè)計的,實際轉(zhuǎn)換時相當(dāng)簡便。Java在解釋運行時采用一種即時編譯技術(shù),可使Java程序的執(zhí)行速度提升很大。多年的發(fā)展Java虛擬機也有很多改進這都使得Java程序的執(zhí)行速度提升很大。
10. 多線程
Java是為網(wǎng)絡(luò)編程而設(shè)計的,這要求Java能夠并發(fā)處理多個任務(wù)。Java支持多線程編程,多線程機制可以實現(xiàn)并發(fā)處理多個任務(wù),互不干涉,不會由于某一任務(wù)處于等待狀態(tài)而影響了其它任務(wù)的執(zhí)行,這樣就可以容易的實現(xiàn)網(wǎng)絡(luò)上的實時交互操作。
11. 動態(tài)
Java應(yīng)用程序在運行過程中,可以動態(tài)的加載各種類庫,即使是更新類庫也不必重新編譯使用這一類庫的應(yīng)用程序。這一特點使之非常適合于網(wǎng)絡(luò)環(huán)境下運行,同時也非常有利于軟件的開發(fā)。
1.3 Java平臺
Java不僅是編程語言,還是一個開發(fā)平臺,Sun公司根據(jù)Java應(yīng)用領(lǐng)域的不同將Java分成三個平臺:Java SE、Java EE和Java ME。
1.3.1 Java SE
Java SE是Java Standard Edition,主要目的是為臺式機和工作站桌面應(yīng)用(Application)程序的版本。Java SE是其他平臺的基礎(chǔ),本書主要介紹的就是Java SE版本中的技術(shù)。
Java SE中主要包含了:JRE(Java SE Runtime Environment,Java SE運行環(huán)境)、JDK(Java Development Kit,Java開發(fā)工具包)和Java核心類庫。如果只是運行Java程序,不考慮開發(fā)Java程序,那么只安裝JRE就可以了。在JRE中包含了Java程序運行所需要的Java虛擬機(JVM,Java Virtual Machine)。JDK中包含了JRE和一些開發(fā)工具,這些工具包括:編譯器、文檔生成器和文件打包等工具。
另外,Java SE中還提供了Java應(yīng)用程序開發(fā)需要的基本的和核心的類庫,這些類庫:字符串、集合、輸入輸出、網(wǎng)絡(luò)通信和圖形用戶界面等。事實上學(xué)習(xí)Java就是在學(xué)習(xí)Java語法和Java類庫使用。
1.3.2 Java EE
Java EE是Java Enterprise Edition,主要目的是為簡化企業(yè)級系統(tǒng)的開發(fā)、部署和管理。Java EE是以Java SE為基礎(chǔ)的,并提供了一套服務(wù)、API接口和協(xié)議,能夠開發(fā)企業(yè)級分布式系統(tǒng)、Web應(yīng)用程序和業(yè)務(wù)組件等,其中的包括:JSP、Servlet、EJB、JNI和Java Mail等。
1.3.3 Java ME
Java ME是Java Micro Edition,主要是面向消費類電子產(chǎn)品,為消費電子產(chǎn)品提供一個Java的運行平臺,使得Java程序能夠在手機、機頂盒、PDA等產(chǎn)品上運行。Java ME在早期的諾基亞塞班手機系統(tǒng)有很多應(yīng)用,而現(xiàn)在的iOS和Android等智能手機中基本上沒有它的用武之地。(相關(guān)推薦:)
1.4 Java虛擬機
Java應(yīng)用程序能夠跨平臺運行,主要是通過Java虛擬機實現(xiàn)的。不同軟硬件平臺Java虛擬機是不同的,Java虛擬機往下是不同的操作系統(tǒng)和CPU,使用或開發(fā)時需要下載不同的JRE或JDK版本。Java虛擬機往上是Java應(yīng)用程序,Java虛擬機屏蔽了不同軟硬件平臺,Java應(yīng)用程序不需要修改,不需要重新編譯直接可以在其他平臺上運行。