官术网_书友最值得收藏!

【知識儲備】

1.1 Java語言的發(fā)展和特點

1.1.1 Java語言的發(fā)展

Java語言誕生于1991年,它是Sun公司(后被Oracle公司收購)為一些消費性電子產(chǎn)品所設(shè)計的,目的是開發(fā)一個新的語言,可以對電冰箱、電視機、電子游戲機等家用電器進(jìn)行編程控制,和設(shè)備進(jìn)行信息交流。鑒于這些電子產(chǎn)品有一個共同的特點:計算處理能力和內(nèi)存都非常有限,因此要求:①該語言必須非常小且能生成非常緊湊的代碼,這樣才能在上述環(huán)境中執(zhí)行。②由于不同的廠商選擇不同的CPU,所以要求該語言不能和特定的體系結(jié)構(gòu)綁在一起,要求語言本身是中立的,也就是跨平臺的。因此,James Gosling領(lǐng)導(dǎo)的Green項目小組創(chuàng)建了新的程序設(shè)計語言——Oak語言(Java語言的前身),保留了大部分與C++相似的語法,改進(jìn)了C++中過于復(fù)雜或具有危險性的特性。Oak是一種可移植性語言,也就是一種與平臺不相關(guān)的語言,能夠在各種芯片上運行,這樣各家廠商就可以降低研發(fā)成本,直接把應(yīng)用程序應(yīng)用在自家的產(chǎn)品上。

1994年,Oak的技術(shù)日趨成熟,Internet正在蓬勃發(fā)展。用戶迫切希望能夠在網(wǎng)絡(luò)上創(chuàng)建一類無須考慮軟、硬件平臺就可以執(zhí)行的應(yīng)用程序,并且這些程序還要有極大的安全保障,正是由于這種需求給Oak帶來了前所未有的施展舞臺。1995年5月23日,Oak語言改名為Java(Oak商標(biāo)已被注冊),并且在Sun World大會上正式發(fā)布了Java和HotJava瀏覽器。由于Java只是一種編程語言,如果想要開發(fā)復(fù)雜的應(yīng)用程序,需要有一個強大的開發(fā)庫支持,因此,Sun公司在1996年1月23日發(fā)布了JDK 1.0版本。Java語言第一次提出了“Write Once,Run Anywhere”的口號,JDK被發(fā)布后立即引起極大的下載量,Java成為網(wǎng)絡(luò)編程的主流語言之一。Java語言的發(fā)展歷史如下:

978-7-111-60245-3-Chapter01-3.jpg 1996年1月,Sun發(fā)布了JDK 1.0;

978-7-111-60245-3-Chapter01-4.jpg 1997年2月,Sun發(fā)布了JDK 1.1;

978-7-111-60245-3-Chapter01-5.jpg 1998年12月,Sun發(fā)布了JDK 1.2(Java2平臺);

978-7-111-60245-3-Chapter01-6.jpg 1999年6月,Sun重新定義Java技術(shù)架構(gòu),并將Java2平臺分為3個版本:標(biāo)準(zhǔn)版(J2SE)、企業(yè)版(J2EE)和微縮版(J2ME);

978-7-111-60245-3-Chapter01-7.jpg 2000年5月,Sun分別發(fā)布了JDK 1.3和1.4;

978-7-111-60245-3-Chapter01-8.jpg 2004年9月,JDK 1.5發(fā)布,成為Java語言發(fā)展史上又一里程碑。為了表示該版本的重要性,JDK 1.5更名為JDK 5;此時,Java的各種版本已經(jīng)更名,取消其中的數(shù)字“2”:J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME;

978-7-111-60245-3-Chapter01-9.jpg 2006年12月,Sun公司發(fā)布JDK 6.0;

978-7-111-60245-3-Chapter01-10.jpg 2010年9月,發(fā)布JDK 7.0,增加了簡單閉包功能;

978-7-111-60245-3-Chapter01-11.jpg 2014年3月,發(fā)布JDK 8.0,增加了Lambda表達(dá)式等新特性;

978-7-111-60245-3-Chapter01-12.jpg 2017年9月,發(fā)布JDK 9.0,增加了模塊化源代碼等新特性。

1.1.2 Java語言的特點

Java語言是一種高級的、通用的、面向?qū)ο蟮某绦蛟O(shè)計語言。其語法與C或C++類似,但在組織結(jié)構(gòu)上截然不同。它是一種完全面向?qū)ο蟮某绦蛘Z言,程序的基本處理單位是類。由于當(dāng)初在設(shè)計Java的時候,傾向于把它設(shè)計成一種具有生產(chǎn)力的語言,而不僅只是研究性的語言,因此在學(xué)習(xí)運用Java語言的時候,能很快感受到它的便利與強大功能。Java語言有如下特點。

1.簡單的特性

Java語言的語法與C和C++很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉(zhuǎn)換等。Java語言不使用指針,并提供了自動的垃圾收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。

2.面向?qū)ο蟮奶匦?/span>

面向?qū)ο笫荍ava語言最重要的特性。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機制。Java全面支持動態(tài)綁定,而C++只對虛函數(shù)使用動態(tài)綁定。總之,Java是一個純粹的面向?qū)ο蟪绦蛟O(shè)計語言。

3.分布式處理的特性

Java支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有一個網(wǎng)絡(luò)應(yīng)用編程接口,它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java應(yīng)用程序可通過一個特定的URL來打開并訪問對象,就像訪問本地文件系統(tǒng)一樣簡單方便。

4.健壯特性

Java的強類型機制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。

5.結(jié)構(gòu)中立的特性

Java程序(后綴為java的文件)在Java平臺上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件),只要安裝了Java運行時系統(tǒng),Java程序就可以在任意的處理器上運行。

6.安全特性

Java的安全性可從4個方面得到保證。

1)Java語言自身提供的安全。在Java語言里,指針、釋放內(nèi)存等C++中的功能被刪除,避免了非法內(nèi)存操作。

2)編譯器提供的安全。當(dāng)Java用來創(chuàng)建瀏覽器時,語言功能和一些瀏覽器本身提供的功能結(jié)合起來,使它更安全。Java代碼在機器上執(zhí)行前,要經(jīng)過很多次的測試。它需要通過代碼校驗、檢測指針操作、檢測是否正改變一個對象的類型等測試。

3)字節(jié)碼校驗。如果字節(jié)代碼通過代碼檢驗沒有返回錯誤,可以確定代碼沒有堆棧上溢出和下溢出,所有操作代碼參數(shù)類型都是正確的,并且沒有發(fā)生非法數(shù)據(jù)轉(zhuǎn)換。

4)類裝載。類裝載通過本機類與網(wǎng)絡(luò)資源類的名稱分開,來保持安全性,通過分配不同的命名空間以防替代本地的同名類,以避免特洛伊木馬病毒的出現(xiàn)。

7.可移植的特性

這種可移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強的可移植性,Java編譯器是用Java實現(xiàn)的,解釋器是用標(biāo)準(zhǔn)C實現(xiàn)的。

8.解釋的特性

Java編譯器將Java源文件生成類文件,擴展名為.class,類文件可通過java命令加載、解釋、執(zhí)行,將Java代碼轉(zhuǎn)換為機器可執(zhí)行代碼。Java解釋器能直接運行目標(biāo)代碼指令。

9.高性能的特性

與那些解釋型的高級腳本語言相比,Java是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來越接近于C++。

10.多線程的特性

Java語言內(nèi)置支持多線程功能,使得在一個程序里可同時執(zhí)行多個小任務(wù)。多線程帶來的更大的好處是更好的交互性能和實時控制性能。

11.動態(tài)的特性

Java語言的設(shè)計目標(biāo)之一是適應(yīng)于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運行環(huán)境,也可以通過網(wǎng)絡(luò)來載入所需要的類。

1.1.3 Java與C++的比較

Java提供了一個功能強大語言的所有功能,并且?guī)缀鯖]有一點含混特征。C++安全性不高,但C和C++有著大量的用戶,因此Java設(shè)計成與C++相似的形式,讓大家容易學(xué)習(xí)。Java去掉了C++語言的許多功能,讓Java語言很精煉,并增加了一些很有用的功能,因此Java和C++之間存在著一些顯著的差異。事實上,這些差異正是技術(shù)進(jìn)步的表現(xiàn),因此讀者需要特別關(guān)注這些差異。Java和C++之間的差異可見表1-1。

1-1 Java語言與C++語言的比較

978-7-111-60245-3-Chapter01-13.jpg

1.1.4 Java程序的工作機制

Java語言的核心設(shè)計理念是跨平臺和安全性,為此,Java發(fā)展了Java虛擬機、Java字節(jié)碼和垃圾回收機制三大核心技術(shù)。

978-7-111-60245-3-Chapter01-14.jpg

圖1-1 Java程序運行過程

1.Java虛擬機

前文已經(jīng)提到過,平臺無關(guān)性是Java最重要的特性,而實現(xiàn)這一特性的基礎(chǔ)就是Java虛擬機(Java Virtual Machine,JVM)。從底層看,Java虛擬機是以Java字節(jié)碼為指令組的軟CPU。圖1-1顯示了Java程序運行過程。從圖中可以看出,在服務(wù)器端,首先由開發(fā)人員編寫Java源程序并存儲為.java文件;其次,Java編譯器將.java文件編譯成字節(jié)碼并保存為.class文件;最后將.class文件存放在Web服務(wù)器上。在客戶端,用戶訪問服務(wù)器端的主頁,下載Java程序,再依賴本地Java虛擬機對.class文件解釋執(zhí)行。

Java虛擬機包含類加載器、字節(jié)碼校驗器和JIT實時編譯器。類加載器用來取得從網(wǎng)絡(luò)獲取的或存于本地機器上的類文件字節(jié)碼。下一步由字節(jié)碼校驗器檢查這些類文件是否有正確的格式,以確認(rèn)在運行時不會有破壞內(nèi)存的行為。Java解釋器將字節(jié)碼解釋翻譯成機器碼,而JIT編譯器也可將字節(jié)碼轉(zhuǎn)為本地機器碼,但它可使原本是解釋執(zhí)行方式的虛擬機提高到編譯式的運行效率。

2.Java字節(jié)碼

Java源程序通過Java編譯器編譯后的產(chǎn)品是字節(jié)碼文件(.class),與機器碼不同,它不是真實CPU可執(zhí)行的機器代碼,故又稱偽代碼。字節(jié)碼文件需要由JVM在執(zhí)行期間編譯成能被本地機器識別的機器碼,然后再交給操作系統(tǒng)執(zhí)行(見圖1-1)。因此,Java的跨平臺性不僅是源代碼級的跨平臺,而且可執(zhí)行文件也是跨平臺的,只要目標(biāo)操作系統(tǒng)安裝了JVM,就可以執(zhí)行任意的字節(jié)碼文件,從而實現(xiàn)“Write Once,Run Anywhere”(一次編寫,到處運行)。

3.垃圾回收機制

Java語言一個顯著的特點就是引入了自動垃圾回收機制,使C++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內(nèi)存空間的釋放問題,這一切工作由Java的自動垃圾回收機制完成。垃圾回收可以有效地防止內(nèi)存泄露,有效地使用空閑的內(nèi)存。所謂內(nèi)存泄露是指該內(nèi)存空間使用完畢后未回收,即內(nèi)存中某個對象的生命周期超出了程序需要它的時間長度。

主站蜘蛛池模板: 鸡西市| 乌恰县| 重庆市| 扬州市| 永兴县| 老河口市| 虞城县| 潮州市| 工布江达县| 江西省| 高要市| 呼玛县| 英吉沙县| 大方县| 重庆市| 阜宁县| 惠水县| 土默特右旗| 伊金霍洛旗| 三原县| 岳阳县| 宜兴市| 碌曲县| 平潭县| 望谟县| 邵武市| 钦州市| 房产| 临桂县| 山西省| 株洲市| 五指山市| 万荣县| 茌平县| 新津县| 沙湾县| 沾化县| 治县。| 红安县| 苍溪县| 巴楚县|