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

【知識儲備】

1.1 Java語言的發展和特點

1.1.1 Java語言的發展

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

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

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

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

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

978-7-111-60245-3-Chapter01-6.jpg 1999年6月,Sun重新定義Java技術架構,并將Java2平臺分為3個版本:標準版(J2SE)、企業版(J2EE)和微縮版(J2ME);

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

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

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

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

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

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

1.1.2 Java語言的特點

Java語言是一種高級的、通用的、面向對象的程序設計語言。其語法與C或C++類似,但在組織結構上截然不同。它是一種完全面向對象的程序語言,程序的基本處理單位是類。由于當初在設計Java的時候,傾向于把它設計成一種具有生產力的語言,而不僅只是研究性的語言,因此在學習運用Java語言的時候,能很快感受到它的便利與強大功能。Java語言有如下特點。

1.簡單的特性

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

2.面向對象的特性

面向對象是Java語言最重要的特性。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現機制。Java全面支持動態綁定,而C++只對虛函數使用動態綁定。總之,Java是一個純粹的面向對象程序設計語言。

3.分布式處理的特性

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

4.健壯特性

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

5.結構中立的特性

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

6.安全特性

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

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

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

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

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

7.可移植的特性

這種可移植性來源于體系結構中立性,另外,Java還嚴格規定了各個基本數據類型的長度。Java系統本身也具有很強的可移植性,Java編譯器是用Java實現的,解釋器是用標準C實現的。

8.解釋的特性

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

9.高性能的特性

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

10.多線程的特性

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

11.動態的特性

Java語言的設計目標之一是適應于動態變化的環境。Java程序需要的類能夠動態地被載入到運行環境,也可以通過網絡來載入所需要的類。

1.1.3 Java與C++的比較

Java提供了一個功能強大語言的所有功能,并且幾乎沒有一點含混特征。C++安全性不高,但C和C++有著大量的用戶,因此Java設計成與C++相似的形式,讓大家容易學習。Java去掉了C++語言的許多功能,讓Java語言很精煉,并增加了一些很有用的功能,因此Java和C++之間存在著一些顯著的差異。事實上,這些差異正是技術進步的表現,因此讀者需要特別關注這些差異。Java和C++之間的差異可見表1-1。

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

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

1.1.4 Java程序的工作機制

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

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

圖1-1 Java程序運行過程

1.Java虛擬機

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

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

2.Java字節碼

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

3.垃圾回收機制

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

主站蜘蛛池模板: 前郭尔| 盘山县| 苍溪县| 繁昌县| 武隆县| 南康市| 江津市| 安吉县| 海门市| 巴彦县| 扎兰屯市| 朝阳县| 鄂伦春自治旗| 吴川市| 永春县| 浦江县| 夏津县| 永丰县| 耒阳市| 乌海市| 宾川县| 开封市| 梅州市| 文水县| 鄂州市| 南皮县| 济源市| 华阴市| 普兰店市| 胶州市| 江华| 海宁市| 田阳县| 南岸区| 西安市| 禹州市| 简阳市| 聂荣县| 常德市| 治县。| 双峰县|