明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

JAVA圖文說明教程 首講 Java語言概述(一)

[摘要]1.1 java語言的發(fā)展史   1.1.1java語言在互聯(lián)網(wǎng)時代獲得巨大成功   大家想一想,在PC下用windows編寫的程序能夠不做修改就直接拿到UNIX系統(tǒng)上運行嗎?顯然是不可以的,因為程序的執(zhí)行最終必須轉換成為計算機硬件的機器指令來執(zhí)行,專門為某種計算機硬件和操作系統(tǒng)編寫的程序是不能夠...
1.1 java語言的發(fā)展史

  1.1.1java語言在互聯(lián)網(wǎng)時代獲得巨大成功

  大家想一想,在PC下用windows編寫的程序能夠不做修改就直接拿到UNIX系統(tǒng)上運行嗎?顯然是不可以的,因為程序的執(zhí)行最終必須轉換成為計算機硬件的機器指令來執(zhí)行,專門為某種計算機硬件和操作系統(tǒng)編寫的程序是不能夠直接放到另外的計算機硬件上執(zhí)行的,至少要做移植工作。要想讓程序能夠在不同的計算機上能夠運行,就要求程序設計語言是能夠跨越各種軟件和硬件平臺的,而java滿足了這一需求。

  1995年,美國Sun Microsystems公司正式向IT業(yè)界推出了java語言,該語言具有安全、跨平臺、面向對象、簡單、適用于網(wǎng)絡等顯著特點,當時以web為主要形式的互聯(lián)網(wǎng)正在迅猛發(fā)展,java語言的出現(xiàn)迅速引起所有程序員和軟件公司的極大關注,程序員們紛紛嘗試用java語言編寫網(wǎng)絡應用程序,并利用網(wǎng)絡把程序發(fā)布到世界各地進行運行。包括IBM、Oracle、微軟、Netscape、Apple、SGI等大公司紛紛與Sun Microsystems公司簽訂合同,授權使用java平臺技術。微軟公司總裁比爾蓋茨先生在經過研究后認為"java語言是長時間以來最卓越的程序設計語言"。目前,java語言已經成為最流行的網(wǎng)絡編程語言,截止到2001年中,全世界大約有310萬java程序員,許多大學紛紛開設java課程,java正逐步成為世界上程序員最多的編程語言。

  在經歷了以大型機為代表的集中計算模式和以PC機為代表的分散計算模式之后,互聯(lián)網(wǎng)的出現(xiàn)使得計算模式進入了網(wǎng)絡計算時代。網(wǎng)絡計算模式的一個特點是計算機是異構的,即計算機的類型和操作系統(tǒng)是不一樣的,例如SUN工作站的硬件是SPARC體系,軟件是UNIX中的Solaris操作系統(tǒng),而PC機的硬件是INTEL體系,操作系統(tǒng)是windows或者是Linux,因此相應的編程語言基本上只是適用于單機系統(tǒng),例如COBOL、FORTRAN、C、C++等等;網(wǎng)絡計算模式的另一個特點是代碼可以通過網(wǎng)絡在各種計算機上進行遷移,這就迫切需要一種跨平臺的編程語言,使得用它編寫的程序能夠在網(wǎng)絡中的各種計算機上能夠正常運行,java就是在這種需求下應運而生的。正是因為java語言符合了互聯(lián)網(wǎng)時代的發(fā)展要求,才使它獲得了巨大的成功。


  1.1.2 java語言的產生

  任何事物的產生既有必然的原因也有偶然的因素,java語言的出現(xiàn)也驗證了這一點。1991年,美國Sun Microsystems公司的某個研究小組為了能夠在消費電子產品上開發(fā)應用程序,積極尋找合適的編程語言。消費電子產品種類繁多,包括PDA、機頂盒、手機等等,即使是同一類消費電子產品所采用的處理芯片和操作系統(tǒng)也不相同,也存在著跨平臺的問題。當時最流行的編程語言是C和C++語言,Sun公司的研究人員就考慮是否可以采用C++語言來編寫消費電子產品的應用程序,但是研究表明,對于消費電子產品而言C++語言過于復雜和龐大,并不適用,安全性也并不令人滿意。于是,Bill Joy先生領導的研究小組就著手設計和開發(fā)出一種語言,稱之為Oak。該語言采用了許多C語言的語法,提高了安全性,并且是面向對象的語言,但是Oak語言在商業(yè)上并未獲得成功。時間轉到了1995年,互聯(lián)網(wǎng)在世界上蓬勃發(fā)展,Sun公司發(fā)現(xiàn)Oak語言所具有的跨平臺、面向對象、安全性高等特點非常符合互聯(lián)網(wǎng)的需要,于是改進了該語言的設計,要達到如下幾個目標:

   ◇ 創(chuàng)建一種面向對象的程序設計語言,而不是面向過程的語言;
   ◇ 提供一個解釋執(zhí)行的程序運行環(huán)境,是程序代碼獨立于平臺;
   ◇ 吸收C和C++的優(yōu)點,使程序員容易掌握;
   ◇ 去掉C和C++中影響程序健壯性的部分,使程序更安全,例如指針、內存申請和釋放;
   ◇ 實現(xiàn)多線程,使得程序能夠同時執(zhí)行多個任務;
   ◇ 提供動態(tài)下載程序代碼的機制;
   ◇ 提供代碼校驗機制以保證安全性;
  
  最終,Sun公司給該語言取名為java語言,造就了一代成功的編程語。

  1.2 java的工作原理

  1.2.1 java虛擬機(1)

   java虛擬機是軟件模擬的計算機,可以在任何處理器上(無論是在計算機中還是在其它電子設備中)安全并且兼容的執(zhí)行保存在.class文件中的字節(jié)碼。java虛擬機的"機器碼"保存在.class文件中,有時也可以稱之為字節(jié)碼文件。java程序的跨平臺主要是指字節(jié)碼文件可以在任何具有java虛擬機的計算機或者電子設備上運行,java虛擬機中的java解釋器負責將字節(jié)碼文件解釋成為特定的機器碼進行運行。java源程序需要通過編譯器編譯成為.class文件(字節(jié)碼文件),java程序的編譯和執(zhí)行過程

  1.2.1 java虛擬機(2)

  但是,java虛擬機的建立需要針對不同的軟硬件平臺做專門的實現(xiàn),既要考慮處理器的型號,也要考慮操作系統(tǒng)的種類。如下圖所示,目前在SPARC結構、X86結構、MIPS和PPC等嵌入式處理芯片上、在UNIX、Linux、windows和部分實時操作系統(tǒng)上都有java虛擬機的實現(xiàn)。

  1.2.2 無用內存自動回收機制
  在程序的執(zhí)行過程中,部分內存在使用過后就處于廢棄狀態(tài),如果不及時進行無用內存的回收,就會導致內存泄漏,進而導致系統(tǒng)崩潰。在C++語言中是由程序員進行內存回收的,程序員需要在編寫程序的時候把不再使用的對象內存釋放掉;但是這種人為的管理內存釋放的方法卻往往由于程序員的疏忽而致使內存無法回收,同時也增加了程序員的工作量。而在java運行環(huán)境中,始終存在著一個系統(tǒng)級的線程,專門跟蹤內存的使用情況,定期檢測出不再使用的內存,并進行自動回收,避免了內存的泄露,也減輕了程序員的工作量。

  1.2.3 代碼安全性檢查機制
  安全和方便總是相對矛盾的。java編程語言的出現(xiàn)使得客戶端機器可以方便的從網(wǎng)絡上下載java程序到本機上運行,但是如何保證該java程序不攜帶病毒或者不懷有其它險惡目的呢?如果java語言不能保證執(zhí)行的安全性,那么它就不可能存活到今天。雖然有時候少數(shù)程序員會抱怨說applet連文件系統(tǒng)也不能訪問,但是正是各種安全措施的實行才確保了java語言的生存

  字節(jié)碼的執(zhí)行需要經過三個步驟,首先由類裝載器(class loader)負責把類文件(.class文件)加載到java虛擬機中,在此過程需要檢驗該類文件是否符合類文件規(guī)范;其次字節(jié)碼校驗器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作,例如applet程序中寫本機文件系統(tǒng)的操作;如果字節(jié)碼校驗器檢驗通過,由java解釋器負責把該類文件解釋成為機器碼進行執(zhí)行。java虛擬機采用的是"沙箱"運行模式,即把java程序的代碼和數(shù)據(jù)都限制在一定內存空間里執(zhí)行,不允許程序訪問該內存空間外的內存,如果是applet程序,還不允許訪問客戶端機器的文件系統(tǒng)。

  1.2.4 Java語言的特點(1)

  1. 簡單、面向對象和為人所熟悉
  java的簡單首先體現(xiàn)在精簡的系統(tǒng)上,力圖用最小的系統(tǒng)實現(xiàn)足夠多的功能;對硬件的要求不高,在小型的計算機上便可以良好的運行。和所有的新一代的程序設計語言一樣,java也采用了面向對象技術并更加徹底,所有的java程序和applet程序均是對象,封裝性實現(xiàn)了模塊化和信息隱藏,繼承性實現(xiàn)了代碼的復用,用戶可以建立自己的類庫。而且java采用的是相對簡單的面向對象技術,去掉了運算符重載、多繼承的復雜概念,而采用了單一繼承、類強制轉換、多線程、引用(非指針)等方式。無用內存自動回收機制也使得程序員不必費心管理內存,是程序設計更加簡單,同時大大減少了出錯的可能。java語言采用了C語言中的大部分語法,熟悉C語言的程序員會發(fā)現(xiàn)java語言在語法上與C語言極其相似。

  2. 魯棒并且安全
  java語言在編譯及運行程序時,都要進行嚴格的檢查。作為一種強制類型語言,java在編譯和連接時都進行大量的類型檢查,防止不匹配問題的發(fā)生。如果引用一個非法類型、或執(zhí)行一個非法類型操作,java將在解釋時指出該錯誤。在java程序中不能采用地址計算的方法通過指針訪問內存單元,大大減少了錯誤發(fā)生的可能性;而且java的數(shù)組并非用指針實現(xiàn),這樣就可以在檢查中避免數(shù)組越界的發(fā)生。無用內存自動回收機制也增加了java的魯棒性。

  作為網(wǎng)絡語言,java必須提供足夠的安全保障,并且要防止病毒的侵襲。java在運行應用程序時,嚴格檢查其訪問數(shù)據(jù)的權限,比如不允許網(wǎng)絡上的應用程序修改本地的數(shù)據(jù)。下載到用戶計算機中的字節(jié)代碼在其被執(zhí)行前要經過一個核實工具,一旦字節(jié)代碼被核實,便由java解釋器來執(zhí)行,該解釋器通過阻止對內存的直接訪問來進一步提高java的安全性。同時java極高的魯棒性也增強了java的安全性。

  3. 結構中立并且可以移植
  網(wǎng)絡上充滿了各種不同類型的機器和操作系統(tǒng),為使java程序能在網(wǎng)絡的任何地方運行,java編譯器編譯生成了與體系結構無關的字節(jié)碼結構文件格式。任何種類的計算機,只有在其處理器和操作系統(tǒng)上有java運行時環(huán)境,字節(jié)碼文件就可以在該計算機上運行。即使是在單一系統(tǒng)的計算機上,結構中立也有非常大的作用。隨著處理器結構的不斷發(fā)展變化,程序員不得不編寫各種版本的程序以在不同的處理器上運行,這使得開發(fā)出能夠在所有平臺上工作的軟件集合是不可能的。而使用java將使同一版本的應用程序可以運行在所有的平臺上。

  體系結構的中立也使得java系統(tǒng)具有可移植性。java運行時系統(tǒng)可以移植到不同的處理器和操作系統(tǒng)上,java的編譯器是由java語言實現(xiàn)的,解釋器是由java語言和標準C語言實現(xiàn)的,因此可以較為方便的進行移植工作。


  1.2.4 Java語言的特點(2)

  4. 高性能
  雖然java是解釋執(zhí)行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字節(jié)碼可以快速的轉換成為機器碼進行執(zhí)行。而且java字節(jié)碼格式的設計就是針對機器碼的轉換,實際轉換時相當簡便,自動的寄存器分配與編譯器對字節(jié)碼的一些優(yōu)化可使之生成高質量的代碼。隨著java虛擬機的改進和"即時編譯"(just in time)技術的出現(xiàn)使得java的執(zhí)行速度有了更大的提高。

  5. 解釋執(zhí)行、多線程并且是動態(tài)的
  如果你了解C語言和C++語言,可以參考下列java與C/C++語言的比較,如果不了解C語言和C++語言,可以忽略本部分知識。
  a. 全局變量
  java程序不能定義程序的全局變量,而類中的公共、靜態(tài)變量就相當于這個類的全局變量。這樣就使全局變量封裝在類中,保證了安全性,而在C/C++語言中,由于不加封裝的全局變量往往會由于使用不當而造成系統(tǒng)的崩潰。

  b. 條件轉移指令
  C/C++語言中用goto語句實現(xiàn)無條件跳轉,而java語言沒有goto語言,通過例外處理語句try、catch、finally來取代之,提高了程序的可讀性,也增強了程序的魯棒性。

  c. 指針
  指針是C/C++語言中最靈活,但也是最容易出錯的數(shù)據(jù)類型。用指針進行內存操作往往造成不可預知的錯誤,而且,通過指針對內存地址進行顯示類型轉換后,可以類的私有成員,破壞了安全性。在java中,程序員不能進行任何指針操作,同時java中的數(shù)組是通過類來實現(xiàn)的,很好的解決了數(shù)組越界這一C/C++語言中不做檢查的缺點。

  d. 內存管理
  在C語言中,程序員使用庫函數(shù)malloc()和free()來分配和釋放內存,C++語言中則是運算符new和delete。再次釋放已經釋放的內存塊或者釋放未被分配的內存塊,會造成系統(tǒng)的崩潰,而忘記釋放不再使用的內存塊也會逐漸耗盡系統(tǒng)資源。在java中,所有的數(shù)據(jù)結構都是對象,通過運算符new分配內存并得到對象的使用權。無用內存回收機制保證了系統(tǒng)資源的完整,避免了內存管理不周而引起的系統(tǒng)崩潰。

  e. 數(shù)據(jù)類型的一致性
  在C/C++語言中,不同的平臺上,編譯器對簡單的數(shù)據(jù)類型如int、float等分別分配不同的字節(jié)數(shù)。例如:int在IBM PC上為16位,在VAX-11上就為32位,導致了代碼數(shù)據(jù)的不可移植。在java中,對數(shù)據(jù)類型的位數(shù)分配總是固定的,而不管是在任何的計算機平臺上。因此就保證了java數(shù)據(jù)的平臺無關性和可移植性。

  f. 類型轉換
  在C/C++語言中,可以通過指針進行任意的類型轉換,不安全因素大大增加。而在java語言中系統(tǒng)要對對象的處理進行嚴格的相容性檢查,防止不安全的轉換。

  g. 頭文件
  在C/C++語言中使用頭文件聲明類的原型和全局變量及庫函數(shù)等,在大的系統(tǒng)中,維護這些頭文件是非常困難的。java不支持頭文件,類成員的類型和訪問權限都封裝在一個類中,運行時系統(tǒng)對訪問進行控制,防止非法的訪問。同時,java中用import語句與其它類進行通信,以便訪問其它類的對象。

  h. 結構和聯(lián)合
  C/C++語言中用結構和聯(lián)合來表示一定的數(shù)據(jù)結構,但是由于其成員均為公有的,安全性上存在問題。java不支持結構和聯(lián)合,通過類把數(shù)據(jù)結構及對該數(shù)據(jù)的操作都封裝在類里面。