版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
畢業(yè)設(shè)計(論文)外文資料翻譯學(xué)院:信息工程學(xué)院專業(yè):計算機科學(xué)與技術(shù)姓名:XXXXXXXXX學(xué)號:XXXXXXXXX外文出處:Cays.HorstmannCoreJava,VolumeII,AdvancedFeatures,EighthEdition附件:1.外文資料翻譯譯文;2.外文原文。指導(dǎo)教師評語:簽名:
附件1:外文資料翻譯譯文Java技術(shù)介紹Java是一種程序設(shè)計平臺Java是一種優(yōu)秀的程序設(shè)計語言。對于一個名副其實的程序設(shè)計人員來說,使用Java無疑是一個好的選擇。有人認為:Java將有望成為一種最優(yōu)秀的程序設(shè)計語言,但還需要一個相當(dāng)長的發(fā)展時期。一旦一種語言應(yīng)用于某個領(lǐng)域,與現(xiàn)存代碼的相容性問題就擺在了人們的面前。”Java并不只是一種語言。在此之前出現(xiàn)的那么多種語言也沒有能夠引起那么大的轟動。Java是一個完整的平臺,有一個龐大的庫,其中包含很多可重用的代碼和一個提供諸如安全性、跨操作系統(tǒng)的可移植性以及自動垃圾回收等服務(wù)的執(zhí)行環(huán)境。作為一名程序設(shè)計人員,常常希望能夠有一種語言,它具有令人賞心悅目的語法和易于理解的語義(C++不是這樣的)。與許多其他的優(yōu)秀語言一樣,Java恰恰滿足了這些要求。有些語言提供了可移植性、垃圾回收等等,但是,沒有提供一個大型的庫,如果想要有奇特的繪圖功能、網(wǎng)絡(luò)連接功能和數(shù)據(jù)庫存取功能就必須自己動手編寫代碼。Java這種功能齊全的出色語言,具有高質(zhì)量的執(zhí)行環(huán)境以及龐大的庫。正是因為它集多種優(yōu)勢于一身,所以對于廣大的程序設(shè)計人員來說有著不可抗拒的吸引力。JAVA的特性1.簡單性人們希望構(gòu)建一個無需深奧的專業(yè)訓(xùn)練就可以進行編程的系統(tǒng),并且要符合當(dāng)今的標準慣例。因此,盡管人們發(fā)現(xiàn)C++不太適用,但在設(shè)計Java的時候還是盡可能地接近C++,以便系統(tǒng)更易于理解。Java別除了C++中許多很少使用、難以理解、易混淆的特性。在目前看來,這些特性帶來的麻煩遠遠大于帶來的好處。的確,Java語法是C++語法的一個“純凈”版本。這里沒有頭文件、指針運算(甚至指針語法)、結(jié)構(gòu)、聯(lián)合、操作符重載、虛基類等等。(請參看本書各個章節(jié)給出的C++注釋,那里比較詳細地解釋了Java與C++之間的區(qū)別。)然而,設(shè)計者并沒有試圖清除C++中所有不適當(dāng)?shù)奶匦?。例如,switch語句的語法在Java中就沒有改變。如果熟悉C++就會發(fā)現(xiàn)可以輕而易舉地將它轉(zhuǎn)換成Java,如果已經(jīng)習(xí)慣于可視化的編程環(huán)境(例如VisualBasic),就不會覺得Java簡單了。Java有許多奇怪的語法(盡管掌握其要領(lǐng)并不需要很長時間),更重要的是,使用Java需要自己編寫大量的程序。VisualBasic的魅力在于它的可視化設(shè)計環(huán)境幾乎自動地為應(yīng)用程序提供了大量的基礎(chǔ)結(jié)構(gòu)。而使用Java實現(xiàn)同樣的功能卻需要手工地編制代碼,通常代碼量還相當(dāng)大。然而,已經(jīng)有一些支持“拖放”風(fēng)格程序開發(fā)的第三方開發(fā)環(huán)境。簡單性的另一個方面是小。Java的目標之一是支持開發(fā)能夠在小型機器上獨立運行的軟件?;镜慕忉屍饕约邦愔С执蠹s僅為40KB;再加上基礎(chǔ)的標準類庫和對線程的支持(基本上是一個自含的微內(nèi)核)大約需要增加175KB。這是一個了不起的成就。然而,需要注意的是支持圖形用戶界面(GUI)的類庫相當(dāng)大。2.面向?qū)ο蠛唵蔚刂v,面向?qū)ο笤O(shè)計是一種程序設(shè)計技術(shù)。它將重點放在數(shù)據(jù)(即對象)和對象的接口上。用木匠來打一個比方,一個“面向?qū)ο蟮摹蹦窘呈冀K關(guān)注的是所制作的椅子,第二位才是所使用的工具;一個“非面向?qū)ο蟮摹蹦窘硠t首先考慮的是所用的工具。在本質(zhì)上,Java的面向?qū)ο竽芰εcC++是一樣的。在過去的30年里,面向?qū)ο笠呀?jīng)證明了自身的價值,一種現(xiàn)代的程序設(shè)計語言不使用面向?qū)ο蠹夹g(shù)簡直讓人難以置信。的確,Java的面向?qū)ο筇匦耘cC++旗鼓相當(dāng)。Java與C++的主要不同點在于多繼承,在Java中,取而代之的是簡單的接口概念,以及Java的元類(metaclass)模型。反射機制以及對象序列化特性使得Java更加容易實現(xiàn)持久對象和GUI構(gòu)建器(可以整合外來組件)。3.分布式Java有一個擴展的例程庫,用于處理像HTTP和FTP這類的TCP/IP協(xié)議。Java應(yīng)用程序能夠通過URL打開和訪問網(wǎng)絡(luò)上的對象,其便利程度如同訪問本地文件系統(tǒng)一樣。人們已經(jīng)看到Java的網(wǎng)絡(luò)能力強大且易于使用。任何曾經(jīng)試圖使用其他語言進行網(wǎng)絡(luò)編程的人都會驚呼Java竟然把類似打開socket連接這類繁重的任務(wù)都變得如此簡單。另外,遠程方法調(diào)用機制使得分布式對象之間可以進行通信。現(xiàn)在有一種獨立的體系結(jié)構(gòu),Java2企業(yè)版(J2EE),它支持大規(guī)模的分布式應(yīng)用。4.健壯性Java的設(shè)計目標之一在于使用Java編寫的程序具有多方面的可靠性。Java投入了大量的精力進行早期的問題檢測、后期動態(tài)的(運行時)檢測,并消除了有出錯傾向的狀態(tài)……Java和C++最大的不同在于Java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能性。這個特性非常有用。Java編譯器能夠檢測許多在其他語言中僅在運行時刻才能夠檢測出來的問題。至于第二點,對于曾經(jīng)花費幾個小時來檢查由于指針bug而引起內(nèi)存沖突的人來說,一定很喜歡Java的這一特性。如果曾經(jīng)只使用過VisualBasic這類沒有顯式指針的語言,就會感覺這么說似乎有些小題大做。然而,C程序員就沒有這樣幸運了。他們需要利用指針來存取串、數(shù)組、對象,甚至文件。在VisualBasic中,根本不必使用指針來訪問這些實體,也不必關(guān)心有關(guān)內(nèi)存分配的問題。另一方面,在沒有指針的語言中,許多數(shù)據(jù)結(jié)構(gòu)很難實現(xiàn)。Java具有雙方的優(yōu)勢。它不需要使用指針構(gòu)造諸如串、數(shù)組這樣的結(jié)構(gòu)。如果需要,也能夠具有指針的能力,如鏈表。Java絕對是安全的,其原因是永遠不會存取一個“壞的”指針,造成內(nèi)存分配的錯誤,也不必防范內(nèi)存泄漏。5.安全性Java適用于網(wǎng)絡(luò)/分布式環(huán)境。為了達到這個目標,在安全方面投入了很大精力。使用Java可以構(gòu)建防病毒、防墓改的系統(tǒng)。事實證明這是正確的。在Java開發(fā)工具箱啟用后不久,普林斯頓大學(xué)的一些安全專家們發(fā)現(xiàn)了在Java1.0中的某些安全特性方面存在著一些非常隱蔽的bug,SunMicrosystems大力支持對Java的安全性的研究,制定了供人們使用的規(guī)范,實現(xiàn)了虛擬機和安全庫,并迅速地處理了所有已知的安全bug。在任何情況下,蒙騙Java的安全機制都是十分困難的?,F(xiàn)在,發(fā)現(xiàn)bug所需的技術(shù)性越來越強,數(shù)目越來越少。從一開始,Java就被設(shè)計成能夠防范各種襲擊,包括:·禁止運行時堆棧溢出。例如,蠕蟲等病毒常用的襲擊手段?!そ乖谧约旱奶幚砜臻g之外破壞內(nèi)存。·未經(jīng)授權(quán)禁止讀寫文件。許多安全特性相繼不斷地被加入Java中。自從Java1.1問世以來,Java就有了數(shù)字簽名類(digitallysignedclass)的概念(請參看卷II)。通過數(shù)字簽名類,可以確定類的作者。如果信任這個類的作者,這個類就可以在你的機器上擁有更多的權(quán)限。來自微軟的基于ActiveX技術(shù)的競爭代碼傳輸機制,其安全性完全依賴于數(shù)字簽名。這顯然是不夠的,因為微軟自身產(chǎn)品的任何用戶都可以證實,來自知名提供商的程序會崩潰并對系統(tǒng)產(chǎn)生危害。Java的安全機制比ActiveX要強得多,因為它是在應(yīng)用程序運行時加以拉制并制止惡意性破壞的。6.體系結(jié)構(gòu)中立編譯器生成一個體系結(jié)構(gòu)中立的目標文件格式,這是一種編譯過場代碼,只要有Java運行時系統(tǒng),就可以在許多處理器上運行。Java編譯器通過生成與特定的計算機體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令來實現(xiàn)這一特性。精心設(shè)計的字節(jié)碼不僅可以很容易地在任何機器上被解釋執(zhí)行,而且還可以迅速地翻譯成本地機器的代碼。這并不是什么新的思想。20多年以前,NiklausWirth最初實現(xiàn)的Pascal以及UCSDPascal系統(tǒng)都使用了這種技術(shù)。當(dāng)然,解釋字節(jié)碼肯定要比全速地運行機器指令慢很多。所以說,這是不是一個好的思想還很難講!然而,虛擬機有一個選項,它可以將執(zhí)行最頻繁的字韋碼序列翻譯成機器碼,這一過程被稱為即時編譯。這一策略已經(jīng)被證明十分有效,致使微軟的.NET平臺也依賴于虛擬機。虛擬機還有一些其他的優(yōu)點。虛擬機可以檢測指令序列的行為,以增強其安全性。有些程序甚至能夠快速地生成字節(jié)碼,并動態(tài)地增強所運行程序的處理能力。7.可移植性與C和C++不同,Java規(guī)范中沒有“依賴具體實現(xiàn)”的地方。塞本數(shù)據(jù)類型的大小以及有關(guān)算法都做了明確的說明。例如,Java中的int永遠為32位的整數(shù),而在C/C++中,int可能是16位整數(shù)、32位整數(shù),也可能是編譯器提供商指定的其他大小。唯一的限制只是int類型的大小不能低于shortint,并且不能高于longint。在Java中,數(shù)據(jù)類型具有固足的大小,們除J代消移祖盯竿八大油a'i土女IWJ*I。-mlR77數(shù)據(jù)以固定的格式存儲和傳輸,消除了字節(jié)順序的困擾。字符串是用標準的Unicode格式存儲的。作為系統(tǒng)的組成部分的類庫,定義了可移植的接口。例如,有一個抽象的Window類給出了在UNIX,Windows和Macintosh環(huán)境下的不同實現(xiàn)。凡是嘗試過的人都知道,要編寫一個在Windows,Macintosh和10種不同風(fēng)格的、在UNIX上看起來都不錯的程序有多么困難。Java1.0就嘗試著做了這么一個壯舉,發(fā)布了一個將常用的用戶界面元素映射到不同平臺上的簡單工具箱。遺憾的是,花費了大量的心血,卻構(gòu)建了一個在各個系統(tǒng)上都難以讓人接受的庫(而且,在不同平臺的圖形實現(xiàn)中有不同的bug)。不過,這畢竟是個開端。對于許多應(yīng)用問題來說,可移植性比花枝招展的用戶界面更加重要。而且這些應(yīng)用程序從Java的早期版本中獲益匪淺。現(xiàn)在,用戶界面工具箱已經(jīng)完全被重寫了,不再依賴于主機的用戶接口?,F(xiàn)在的Java版本比早期版本更加穩(wěn)定,更加吸引人。8.解釋型Java解釋器可以在任何移植了解釋器的機器上執(zhí)行Java字節(jié)碼。由于鏈接是一個更加增量且簡便的過程,所以開發(fā)過程也變得更加快捷,更加具有探索性。增量鏈接有其優(yōu)勢,但給開發(fā)過程帶來的好處顯然是言過其實了。在任何情況下,都會覺得Java開發(fā)工具的速度相當(dāng)慢。如果習(xí)慣于經(jīng)典的MicrosoftVisualC++環(huán)境的速度,就會對Java開發(fā)環(huán)境的性能感到失望。(但是,VisualStudio的當(dāng)前版本不像經(jīng)典的環(huán)境那樣快捷。無論用什么語言編寫程序,都需要向老板申請一臺速度更快的計算機,以便運行最新的開發(fā)環(huán)境。)9.高性能盡管對解釋后的字節(jié)碼性能已經(jīng)比較滿意,但在有些情況下卻需要更加高效的性能。字節(jié)碼可以(在運行時刻)被快速地翻譯成運行該應(yīng)用程序的特定CPU的機器碼。如果使用解釋器執(zhí)行字節(jié)碼,根本就不可能用術(shù)語“高性能”。然而,在許多平臺上,還有另一種編譯形式,這就是即時編譯器(JIT編譯器)。它的基本工作方式是一次把字節(jié)碼編譯為本地代碼,并將結(jié)果緩存起來。在需要的時候重新調(diào)用。由于這種方式只需要進行一次解釋,從而極大地提高了常用代碼運行速度。雖然,即時編譯器仍然比真正的本地代碼編譯器慢一些,但是對某些程序來說,能夠提高10倍乃至20倍的速度,而且?guī)缀踉谌魏吻闆r下,都比解釋器的速度快得多。這個技術(shù)始終在不斷完善著,或許有一天它能夠達到傳統(tǒng)編譯系統(tǒng)所無法匹敵的性能。例如,即時編譯器可以監(jiān)視哪些代碼被頻繁地執(zhí)行,并對其進行優(yōu)化,以提高程序的運行速度。10.多線程多線程可以帶來更好的交互響應(yīng)和實時行為。如果曾經(jīng)使用過其他語言編寫多線程的應(yīng)用程序,就會對Java多線程處理的便捷性驚嘆不已。只要操作系統(tǒng)支持,Java中的線程就可以利用多個處理器。在底層,主流平臺的線程實現(xiàn)機制各不相同,Java并沒有花費太大的力氣對此實現(xiàn)平臺無關(guān)性。在不同的機器上,只是調(diào)用多線程的代碼完全相同;Java把多線程的實現(xiàn)交給了底層的操作系統(tǒng)或線程庫來完成。(有關(guān)線程的詳細內(nèi)容將在卷II中介紹。)盡管如此,多線程的簡單性是Java成為頗具魅力的服務(wù)器端開發(fā)語言的主要原因之一。11.動態(tài)性從各種角度看,Java與C或C++相比更加具有動態(tài)性。它能夠適應(yīng)不斷發(fā)展的環(huán)境。庫中可以自由地添加新方法和實例變童,而時客戶端卻沒有任何影響。在Java中找出運行時刻類型信息十分直觀。當(dāng)需要將某些代碼添加到正在運行的程序中時,動態(tài)性將是一個非常重要的特性。一個很好的例子是:從Internet上下載代碼,然后在瀏覽器上運行。在Java1.0中,不能直接地獲取運行時類型信息,而Java的當(dāng)前版本允許程序員知曉對象的結(jié)構(gòu)和行為。這對于必須在運行時分析對象的系統(tǒng)來說非常有用。這些系統(tǒng)有:JavaGUI構(gòu)建器、智能調(diào)試器、可插入組件以及對象數(shù)據(jù)庫。微軟曾經(jīng)發(fā)布了一個叫做J++的產(chǎn)品,它與Java有許多共享的機制。與Java一樣,J++是由虛擬機來執(zhí)行的,該虛擬機與執(zhí)行Java字節(jié)碼的Java虛擬機相互兼容,但是,當(dāng)與外部代碼有接口時就會出現(xiàn)很多不同之處?;菊Z言的語法與Java幾乎一樣。只是除了與WindowsAPI的接口之外,還增加了一些可能具有一定實用性的語言結(jié)構(gòu)。Java和J++不僅共享通用的語法,它們的塞本類庫(串、實用程序、聯(lián)網(wǎng)、多線程、數(shù)學(xué)函數(shù)等等)從本質(zhì)上說也是一致的。然而,圖形庫、用戶界面、遠程對象存取的方式則完全不同。為此,微軟不再支持J++,取而代之的是另一種被稱為C#語言。C#與Java有很多相似之處,然而使用的卻是完全不同的虛擬機。甚至還有一種J#語言可將J++的應(yīng)用遷移到使用C#的虛擬機上。Java與Internet這里的思想很簡單:用戶將從Internet下載Java字節(jié)碼,并在自己的機器上運行。在網(wǎng)頁中運行的Java程序稱為applet。為了使用applet,需要一個啟用Java的Web瀏覽器來執(zhí)行字節(jié)碼。因為Sun公司只負責(zé)發(fā)放Java源代碼的許可證,并堅持不允許對語言和基本類庫的結(jié)構(gòu)做出任何修改,因此,Java的applet應(yīng)該可以運行在任何啟用Java瀏覽器上。遺憾的是,實際情況并非如此。各個版本的Netscape(網(wǎng)景瀏覽器)和InternetExplorer(IE瀏覽器)運行著不同版本的Java,其中有些早已過時。這種糟糕的情況導(dǎo)致更加難于利用Java最新版本來開發(fā)applet。為了擺脫這種局面,Sun開發(fā)了Java插件。這就使得Netscape和InternetExplorer都可以利用最新的Java運行時環(huán)境。用戶下載一個applet就如同在網(wǎng)頁中嵌入一幅圖片。applet成為了頁面的一部分。文本環(huán)繞著applet所占據(jù)的空間周圍。關(guān)鍵一點是圖片為活動的。它可以對用戶命令做出響應(yīng),改變外觀,在運行它的計算機與提供它的計算機之間傳遞數(shù)據(jù)。applet顯示了分子結(jié)構(gòu),這將需要相當(dāng)復(fù)雜的計算。在一個網(wǎng)頁中,可以利用鼠標進行旋轉(zhuǎn),調(diào)整焦距等操作,以便能夠更好地理解分子結(jié)構(gòu)。用靜態(tài)網(wǎng)頁將無法實現(xiàn)這種直接操作,而applet卻可以達到此目的。可以借助applet在網(wǎng)頁上增加按鈕和輸人框。但是,通過撥號連接下載這樣的applet速度相當(dāng)慢。除此之外,還可以使用DynamicHTML,HTML表單和某種腳本語言(如JavaScript)完成這類操作。當(dāng)然,早期的applet主要用于動畫,如大家熟悉的旋轉(zhuǎn)球、跳動的卡通字符、瘋狂。我們對JAVA的誤解下面是我們對java的一些誤解,這里將給出解釋:1)Java是HTML的擴展。Java是一種程序設(shè)計語言;HTML是一種描述網(wǎng)頁結(jié)構(gòu)的方式。除了存在用于放置Javaapplet的HTML擴展之外,兩者沒有任何共同之處。2)使用XML,就不需要Java。Java是一種程序設(shè)計語言;XML是一種描述數(shù)據(jù)的方式??梢允褂萌魏我环N程序設(shè)計語言來處理XML數(shù)據(jù),而JavaAPI對處理XML提供了很好的支持。此外,許多重要的第三方XML工具是采用Java編寫的.3)Java是一種非常容易學(xué)習(xí)的程序設(shè)計語言。Java這種功能強大的語言大都不太容易學(xué)習(xí)。首先,必須將編寫玩具式程序的輕松和開發(fā)實際項目的艱難區(qū)分開來。如何使用Java類庫將Java語言應(yīng)用到實際中去。Java類庫包含了數(shù)千種類和接口與幾萬種方法。幸運的是,并不需要知曉它們中的每一個,但是要用Java解決實際問題,還是需要了解不少內(nèi)容的。4)Java將成為適用于所有平臺的通用性編程語言。從理論上講,這是完全有可能的。的確,除了微軟之外的每一個廠商都希望如此。然而有很多已經(jīng)在桌面計算機上工作良好的應(yīng)用程序,它們不大可能在其他設(shè)備或在瀏覽器中工作的也很正常。同時,在編寫這些應(yīng)用程序時,利用了相應(yīng)處理器的速度和本地的用戶接口庫,而且它們已經(jīng)被移植到所有重要的平臺上。這類應(yīng)用程序包括字處理程序、圖片編輯器、Web瀏覽器。它們通常是用C或C++編寫的,采用Java語言進行重新編寫似乎對最終的用戶不會帶來什么特別的好處。5)Java只不過是另外一種程序設(shè)計語言。Java是一種很好的程序設(shè)計語言;很多程序設(shè)計人員喜歡Java勝過C,C+十或C#。有上百種好的程序設(shè)計語言沒有廣泛地流行,而帶有明顯缺陷的語言,如C十+和VisualBasic卻大行其道。這是為什么呢?程序設(shè)計語言的成功更多地取決于其支持系統(tǒng)的能力,而不是優(yōu)美的語法。人們關(guān)注是:是否提供了易于實現(xiàn)某些功能的易用、便捷標準庫?是否擁有強大的程序設(shè)計能力與調(diào)試環(huán)境工具?語言和工具是否能夠與計算機的其他基礎(chǔ)結(jié)構(gòu)整合在一起.Java的成功就是來自于其類庫能夠讓你輕松地完成原本十分艱難的事情。例如,聯(lián)網(wǎng)、多線程。Java減少了指針錯誤,因此使用Java編程的效率更高了。但這些并不是Java成功的全部原因。6)現(xiàn)在有了C#,Java過時了。C#借鑒了Java許多好的思想,例如,清晰的程序設(shè)計語言、虛擬機和垃圾回收。無論怎樣,C#還是保持了一些好的特性,其中最重要的是安全性和平臺無關(guān)性。人們普遍認為,C#最大的優(yōu)勢是其優(yōu)良的開發(fā)環(huán)境。如果再能夠與Windows捆綁在一起,就更加具有現(xiàn)實意義了。但是,從廣義來判定,Java仍然是大多數(shù)開發(fā)者選擇的語言。7)Java有專利,應(yīng)該避免使用。每個人都需要為這個問題做出決定。有時候會因為Java的某些問題而感到沮喪,并希望能夠擁有一個完全開放的源代碼的團隊給予救助方案。然而,情況沒有這么簡單。盡管Sun公司最終控制著Java,但是他們通過“JavaCommunityProcess”已經(jīng)與許多其他的公司聯(lián)手進行語言修訂版的開發(fā)及新類庫的設(shè)計。虛擬機和類庫的源代碼都可以免費獲取,但Java程序設(shè)計描述是只能夠查閱,而不能修改,也不能再發(fā)布。想一想開放源代碼的那些語言,其實很難說清楚這樣做是否更好。最為流行的是“LAMP"(Linux,Apache,MySQL和Perl/PHP/Python)中的三個“P;。這些語言固然有它們的好處,但同時它們混亂的版本變化、有限的類庫和開發(fā)工具的匾乏也帶來了一定的困擾。另一方面,C++和C#已經(jīng)獨立于廠商的標準協(xié)會標準化。我們認為這一過程比JavaCommunityProcess更加透明。然而,結(jié)果并不像想象的那樣有用。僅僅標準化語言和基類庫是不夠的。對于實際的程序設(shè)計來說,很快會超出字符串、集合和文件的處理范圍。對于C#,微軟一再重申:他們將保持大部分的類庫不做標準化處理或許未來的Java會采用開放源代碼方式。但是,就此而言,許多人都相信Sun公司是Java最可信賴的管理員。8)Java是解釋型的,因此對于正式的應(yīng)用程序而言太慢了。早期的Java是解釋型的?,F(xiàn)在除了像手機這樣的“微型”平臺之外,Java虛擬機使用了即時編譯器,因此采用Java編寫的“熱點”代碼其運行速度與C++相當(dāng)。Java有一些C++沒有的且與虛擬機無關(guān)的額外開銷。垃圾回收會比手工內(nèi)存管理稍微慢一些,并且實現(xiàn)同樣的功能,Java程序需要的內(nèi)存量要比C++程序大。程序啟動可能也會慢一些,特別是大型的程序。另外,JavaGUI要比本地的GUI慢一些,因為它們采用與平臺無關(guān)的方式繪制圖形。人們抱怨Java比C+十慢已經(jīng)有好多年了。但是,今天的計算機比人們發(fā)出抱怨的時候已經(jīng)快了很多很多。一個慢的Java程序與幾年前相當(dāng)快的C++程序相比還是要快一些的。就這一點來說,那些抱怨聽起來像狐貍抱怨葡萄酸,并且一些誹謗者已經(jīng)轉(zhuǎn)過來攻擊Java用戶界面不漂亮而不是攻擊速度慢了。9)所有的Java程序都是在網(wǎng)頁中運行的。所有的Javaapplet都是在網(wǎng)頁瀏覽器中運行的。這也恰恰是applet的定義,即一種在網(wǎng)頁中運行的Java程序。同時,也完全可以編寫一個獨立的、不依賴于Web瀏覽器運行的Java程序,并且十分有用。這些程序(通常稱為應(yīng)用程序)是完全可移植的。把代碼移到另一臺機器上直接運行就行了。由于Java與不夠成熟的C十+相比更加便利、出錯的可能性更小,因而對于程序設(shè)計來說,可謂一種上好的選擇。在使用JDBC這類的數(shù)據(jù)庫存取工具時,Java語言就更是責(zé)無旁貸了。毫無疑問,Java是學(xué)習(xí)程序設(shè)計的首選語言。10)Java程序是主要的安全風(fēng)險。早期的Java,有過關(guān)于安全系統(tǒng)失效的報道,曾經(jīng)引起過公眾的嘩然。大多數(shù)安全問題都存在于Java的特定瀏覽器中。研究人員將這視為一種挑戰(zhàn),其含義是努力找出Java的漏洞,對applet安全模型的強度和復(fù)雜度發(fā)起挑戰(zhàn)。隨后,人們很快就解決了引發(fā)問題的所有技術(shù)因素。據(jù)人們所知,所有的實用系統(tǒng)都妥協(xié)過。想想看:毫不夸張地說,有數(shù)百萬種病毒攻擊著Windows的可執(zhí)行文件和Word宏,這給系統(tǒng)造成了巨大的損害,但卻很少有人批評被攻擊平臺的脆弱。同樣,InternetExplorer中的ActiveX機制始終作為被攻擊的目標,但由于阻止這種攻擊非常簡單,所以人們也就懶得將它們公布于眾了。有些系統(tǒng)管理員在公司的瀏覽器中禁用Java,卻允許其用戶下載可執(zhí)行文件、ActiveX控件和Word文檔。這是多么荒唐可笑啊!通常,不友好的Javaapplet的襲擊的風(fēng)險大約相當(dāng)于因飛機失事而遇難的風(fēng)險;而打開Word文檔遭到襲擊的風(fēng)險則相當(dāng)于步行橫穿繁忙的高速公路而遇難的風(fēng)險。11)JavaScript是Java的簡易版。JavaScript是一種在網(wǎng)頁中使用的腳本語言,它是由Netscape發(fā)明的,原來的名字叫做LiveScriptoJavaScript的語法類似Java,除此之外,兩者無任何關(guān)系(當(dāng)然,名字有些相像)。JavaScript的一個子集已經(jīng)被標準化為ECMA-262,但在實際工作中,使用的擴展部分沒有被標準化,從而導(dǎo)致編寫出能夠同時運行于Netscape和InternetExplorer的JavaScript代碼必定受挫。12)使用Java可以用價值500美元的Internet設(shè)備取代電腦。當(dāng)Java剛剛剛發(fā)布的時候,一些人打賭:肯定會有這樣的好事情發(fā)生。家庭用戶將會放棄功能強大且便利的桌面系統(tǒng),而使用沒有本地存儲的網(wǎng)絡(luò)設(shè)備是一種荒謬的想法。我們發(fā)現(xiàn)基于Java的網(wǎng)絡(luò)計算機對于利用“零管理”來降低計算機所有者的商業(yè)成本來說是一種很好的選擇。即便如此,這種好事也沒有發(fā)生。從另一個方面來說,Java已經(jīng)廣泛地用在手機上。我們必須承認還沒有看到一個運行在手機上的Java應(yīng)用程序是必不可少的。但是,常見的游戲和屏幕保護程序在許多市場上銷售得很好。附件2:外文原文(復(fù)印件)JavaTechnicalDescriptionJavaasaProgrammingPlatformJavaiscertainlyagoodprogramminglanguage.Thereisnodoubtthatitisoneofthebetterlanguagesavailabletoseriousprogrammers.Wethinkitcouldpotentiallyhavebeenagreatprogramminglanguage,butitisprobablytoolateforthat.Oncealanguageisoutinthefield,theuglyrealityofcompatibilitywithexistingcodesetsin."Javawasneverjustalanguage.Therearelotsofprogramminglanguagesoutthere,andfewofthemmakemuchofasplash.Javaisawholeplatform,withahugelibrary,containinglotsofreusablecode,andanexecutionenvironmentthatprovidesservicessuchassecurity,portabilityacrossoperatingsystems,andautomaticgarbagecollection.Asaprogrammer,youwillwantalanguagewithapleasantsyntaxandcomprehensiblesemantics(i.e.,notC++).Javafitsthebill,asdodozensofotherfinelanguages.Somelanguagesgiveyouportability,garbagecollection,andthelike,buttheydon'thavemuchofalibrary,forcingyoutorollyourownifyouwantfancygraphicsornetworkingordatabaseaccess.Well,Javahaseverything—agoodlanguage,ahigh-qualityexecutionenvironment,andavastlibrary.ThatcombinationiswhatmakesJavaanirresistiblepropositiontosomanyprogrammers.FeaturesofJava1.SimpleWewantedtobuildasystemthatcouldbeprogrammedeasilywithoutalotofesoterictrainingandwhichleveragedtoday'sstandardpractice.SoeventhoughwefoundthatC++wasunsuitable,wedesignedJavaascloselytoC++aspossibleinordertomakethesystemmorecomprehensible.Javaomitsmanyrarelyused,poorlyunderstood,confusingfeaturesofC++that,inourexperience,bringmoregriefthanbenefit.ThesyntaxforJavais,indeed,acleaned-upversionofthesyntaxforC++.Thereisnoneedforheaderfiles,pointerarithmetic(orevenapointersyntax),structures,unions,operatoroverloading,virtualbaseclasses,andsoon.(SeetheC++notesinterspersedthroughoutthetextformoreonthedifferencesbetweenJavaandC++.)Thedesignersdidnot,however,attempttofixalloftheclumsyfeaturesofC++.Forexample,thesyntaxoftheswitchstatementisunchangedinJava.IfyouknowC++,youwillfindthetransitiontotheJavasyntaxeasy.Ifyouareusedtoavisualprogrammingenvironment(suchasVisualBasic),youwillnotfindJavasimple.Thereismuchstrangesyntax(thoughitdoesnottakelongtogetthehangofit).Moreimportant,youmustdoalotmoreprogramminginJava.ThebeautyofVisualBasicisthatitsvisualdesignenvironmentalmostautomaticallyprovidesalotoftheinfrastructureforanapplication.Theequivalentfunctionalitymustbeprogrammedmanually,usuallywithafairbitofcode,inJava.Thereare,however,third-partydevelopmentenvironmentsthatprovide"drag-and-drop"-styleprogramdevelopment.Anotheraspectofbeingsimpleisbeingsmall.OneofthegoalsofJavaistoenabletheconstructionofsoftwarethatcanrunstand-aloneinsmallmachines.Thesizeofthebasicinterpreterandclasssupportisabout40Kbytes;addingthebasicstandardlibrariesandthreadsupport(essentiallyaself-containedmicrokernel)addsanadditional175K.2.ObjectOrientedSimplystated,object-orienteddesignisatechniqueforprogrammingthatfocusesonthedata(=objects)andontheinterfacestothatobject.Tomakeananalogywithcarpentry,an"object-oriented"carpenterwouldbemostlyconcernedwiththechairhewasbuilding,andsecondarilywiththetoolsusedtomakeit;a"non-object-oriented"carpenterwouldthinkprimarilyofhistools.Theobject-orientedfacilitiesofJavaareessentiallythoseofC++.Objectorientationhasprovenitsworthinthelast30years,anditisinconceivablethatamodernprogramminglanguagewouldnotuseit.Indeed,theobject-orientedfeaturesofJavaarecomparabletothoseofC++.ThemajordifferencebetweenJavaandC++liesinmultipleinheritance,whichJavahasreplacedwiththesimplerconceptofinterfaces,andintheJavametaclassmodel.ThereflectionmechanismandobjectserializationfeaturemakeitmucheasiertoimplementpersistentobjectsandGUIbuildersthatcanintegrateoff-the-shelfcomponents.3.DistributedJavahasanextensivelibraryofroutinesforcopingwithTCP/IPprotocolslikeHTTPandFTP.JavaapplicationscanopenandaccessobjectsacrosstheNetviaURLswiththesameeaseaswhenaccessingalocalfilesystem.WehavefoundthenetworkingcapabilitiesofJavatobebothstrongandeasytouse.AnyonewhohastriedtodoInternetprogrammingusinganotherlanguagewillrevelinhowsimpleJavamakesoneroustaskslikeopeningasocketconnection.(WecovernetworkinginVolume2ofthisbook.)Theremotemethodinvocationmechanismenablescommunicationbetweendistributedobjects(alsocoveredinVolume2).Thereisnowaseparatearchitecture,theJava2EnterpriseEdition(J2EE),thatsupportsverylargescaledistributedapplications.4.RobustJavaisintendedforwritingprogramsthatmustbereliableinavarietyofways.Javaputsalotofemphasisonearlycheckingforpossibleproblems,laterdynamic(run-time)checking,andeliminatingsituationsthatareerror-prone.…ThesinglebiggestdifferencebetweenJavaandC/C++isthatJavahasapointermodelthateliminatesthepossibilityofoverwritingmemoryandcorruptingdata.Thisfeatureisalsoveryuseful.TheJavacompilerdetectsmanyproblemsthat,inotherlanguages,wouldshowuponlyatruntime.Asforthesecondpoint,anyonewhohasspenthourschasingmemorycorruptioncausedbyapointerbugwillbeveryhappywiththisfeatureofJava.IfyouarecomingfromalanguagelikeVisualBasicthatdoesn'texplicitlyusepointers,youareprobablywonderingwhythisissoimportant.Cprogrammersarenotsolucky.Theyneedpointerstoaccessstrings,arrays,objects,andevenfiles.InVisualBasic,youdonotusepointersforanyoftheseentities,nordoyouneedtoworryaboutmemoryallocationforthem.Ontheotherhand,manydatastructuresaredifficulttoimplementinapointerlesslanguage.Javagivesyouthebestofbothworlds.Youdonotneedpointersforeverydayconstructslikestringsandarrays.Youhavethepowerofpointersifyouneedit,forexample,forlinkedlists.Andyoualwayshavecompletesafety,becauseyoucanneveraccessabadpointer,makememoryallocationerrors,orhavetoprotectagainstmemoryleakingaway.5.SecureJavaisintendedtobeusedinnetworked/distributedenvironments.Towardthatend,alotofemphasishasbeenplacedonsecurity.Javaenablestheconstructionofvirus-free,tamper-freesystems.InthefirsteditionofCoreJavawesaid:"Well,oneshould'neversayneveragain,'"andweturnedouttoberight.NotlongafterthefirstversionoftheJavaDevelopmentKitwasshipped,agroupofsecurityexpertsatPrincetonUniversityfoundsubtlebugsinthesecurityfeaturesofJava1.0.SunMicrosystemshasencouragedresearchintoJavasecurity,makingpubliclyavailablethespecificationandimplementationofthevirtualmachineandthesecuritylibraries.Theyhavefixedallknownsecuritybugsquickly.Inanycase,Javamakesitextremelydifficulttooutwititssecuritymechanisms.Thebugsfoundsofarhavebeenverytechnicalandfewinnumber.Fromthebeginning,Javawasdesignedtomakecertainkindsofattacksimpossible,amongthem:Overrunningtheruntimestack—acommonattackofwormsandvirusesCorruptingmemoryoutsideitsownprocessspaceReadingorwritingfileswithoutpermissionAnumberofsecurityfeatureshavebeenaddedtoJavaovertime.Sinceversion1.1,JavahasthenotionofdigitallysignedclassesWithasignedclass,youcanbesurewhowroteit.Anytimeyoutrusttheauthoroftheclass,theclasscanbeallowedmoreprivilegesonyourmachine.6.ArchitectureNeutralThecompilergeneratesanarchitecture-neutralobjectfileformat—thecompiledcodeisexecutableonmanyprocessors,giventhepresenceoftheJavaruntimesystem.TheJavacompilerdoesthisbygeneratingbytecodeinstructionswhichhavenothingtodowithaparticularcomputerarchitecture.Rather,theyaredesignedtobebotheasytointerpretonanymachineandeasilytranslatedintonativemachinecodeonthefly.Thisisnotanewidea.Morethan20yearsago,bothNiklausWirth'soriginalimplementationofPascalandtheUCSDPascalsystemusedthesametechnique.Ofcourse,interpretingbytecodesisnecessarilyslowerthanrunningmachineinstructionsatfullspeed,soitisn'tclearthatthisisevenagoodidea.However,virtualmachineshavetheoptionoftranslatingthemostfrequentlyexecutedbytecodesequencesintomachinecode,aprocesscalledjust-in-timecompilation.ThisstrategyhasprovensoeffectivethatevenMicrosoft's.NETplatformreliesonavirtualmachine.Thevirtualmachinehasotheradvantages.Itincreasessecuritybecausethevirtualmachinecancheckthebehaviorofinstructionsequences.Someprogramsevenproducebytecodesonthefly,dynamicallyenhancingthecapabilitiesofarunningprogram.7.PortableUnlikeCandC++,thereareno"implementation-dependent"aspectsofthespecification.Thesizesoftheprimitivedatatypesarespecified,asisthebehaviorofarithmeticonthem.Forexample,anintinJavaisalwaysa32-bitinteger.InC/C++,intcanmeana16-bitinteger,a32-bitinteger,oranyothersizethatthecompilervendorlikes.Theonlyrestrictionisthattheinttypemusthaveatleastasmanybytesasashortintandcannothavemorebytesthanalongint.Havingafixedsizefornumbertypeseliminatesamajorportingheadache.Binarydataisstoredandtransmittedinafixedformat,eliminatingconfusionaboutbyteordering.StringsaresavedinastandardUnicodeformat.Thelibrariesthatareapartofthesystemdefineportableinterfaces.Forexample,thereisanabstractWindowclassandimplementationsofitforUNIX,Windows,andtheMacintosh.Asanyonewhohasevertriedknows,itisaneffortofheroicproportionstowriteaprogramthatlooksgoodonWindows,theMacintosh,and10flavorsofUNIX.Java1.0madetheheroiceffort,deliveringasimpletoolkitthatmappedcommonuserinterfaceelementstoanumberofplatforms.Unfortunately,theresultwasalibrarythat,withalotofwork,couldgivebarelyacceptableresultsondifferentsystems.(Andtherewereoftendifferentbugsonthedifferentplatformgraphicsimplementations.)Butitwasastart.Therearemanyapplicationsinwhichportabilityismoreimportantthanuserinterfaceslickness,andtheseapplicationsdidbenefitfromearlyversionsofJava.Bynow,theuserinterfacetoolkithasbeencompletelyrewrittensothatitnolongerreliesonthehostuserinterface.Theresultisfarmoreconsistentand,wethink,moreattractivethaninearlierversionsofJava.8.InterpretedTheJavainterpretercanexecuteJavabytecodesdirectlyonanymachinetowhichtheinterpreterhasbeenported.Sincelinkingisamoreincrementalandlightweightprocess,thedevelopmentprocesscanbemuchmorerapidandexploratory.Incrementallinkinghasadvantages,butitsbenefitforthedevelopmentprocessisclearlyoverstated.Inanycase,wehavefoundJavadevelopmenttoolstobequiteslow.IfyouareusedtothespeedoftheclassicMicrosoftVisualC++environment,youwilllikelybedisappointedwiththeperformanceofJavadevelopmentenvironments.(ThecurrentversionofVisualStudioisn'taszippyastheclassicenvironments,however.Nomatterwhatlanguageyouprogramin,youshoulddefinitelyaskyourbossforafastercomputertorunthelatestdevelopmentenvironments.)9.HighPerformanceWhiletheperformanceofinterpretedbytecodesisusuallymorethanadequate,therearesituationswherehigherperformanceisrequired.Thebytecodescanbetranslatedonthefly(atruntime)intomachinecodefortheparticularCPUtheapplicationisrunningon.Ifyouuseaninterpretertoexecutethebytecodes,"highperformance"isnotthetermthatwewoulduse.However,onmanyplatforms,thereisalsoanotherformofcompilation,thejust-in-time(JIT)compilers.Theseworkbycompilingthebytecodesintonativecodeonce,cachingtheresults,andthencallingthemagainifneeded.Thisapproachspeedsupcommonlyusedcodetremendouslybecauseonehastodotheinterpretationonlyonce.Althoughstillslightlyslowerthanatruenativecodecompiler,ajust-in-timecompilercangiveyoua10-oreven20-foldspeedupforsomeprogramsandwillalmostalwaysbesignificantlyfasterthananinterpreter.Thistechnologyisbeingimprovedcontinuouslyandmayeventuallyyieldresultsthatcannotbematchedbytraditionalcompilationsystems.Forexample,ajust-in-timecompilercanmonitorwhichcodeisexecutedfrequentlyandoptimizejustthatcodeforspeed.10.MultithreadedTheenefitsofmultithreadingarebetterinteractiveresponsivenessandreal-timebehavior.ifyouhaveevertriedtodomultithreadinginanotherlanguage,youwillbepleasantlysurprisedathoweasyitisinJava.ThreadsinJavaalsocantakeadvantageofmultiprocessorsystemsifthebaseoperatingsystemdoesso.Onthedownside,threadimplementationsonthemajorplatformsdifferwidely,andJavamakesnoefforttobeplatformindependentinthisregard.Onlythecodeforcallingmultithreadingremainsthesameacrossmachines;Javaoffloadstheimplementationofmultithreadingtotheunderlyingoperatingsystemorathreadlibrary.Nonetheless,theeaseofmultithreadingisoneofthemainreasonswhyJavaissuchanappealinglanguageforserver-sidedevelopment.11.DynamicInanumberofways,JavaisamoredynamiclanguagethanCorC++.Itwasdesignedtoadapttoanevolvingenvironment.Librariescanfreelyaddnewmethodsandinstancevariableswithoutanyeffectontheirclients.InJava,findingoutruntimetypeinformationisstraightforward.Thisisanimportantfeatureinthosesituationsinwhichcodeneedstobeaddedtoarunningprogram.AprimeexampleiscodethatisdownloadedfromtheInternettoruninabrowser.InJava1.0,findingoutruntimetypeinformationwasanythingbutstraightforward,butcurrentversionsofJavagivetheprogrammerfullinsightintoboththestructureandbehaviorofitsobjects.Thisisextremelyusefulforsystemsthatneedtoanalyzeobjectsatruntime,suchasJavaGUIbuilders,smartdebuggers,pluggablecomponents,andobjectdatabases.JavaandtheInternetTheideahereissimple:userswilldownloadJavabytecodesfromtheInternetandrunthemontheirownmachines.Javaprogramsthatworkonwebpagesarecalledapplets.Touseanapplet,youneedaJava-enabledwebbrowser,whichwillexecutethebytecodesforyou.BecauseSunislicensingtheJavasourcecodeandinsistingthattherebenochangesinthelanguageandbasiclibrarystructure,aJavaappletshouldrunonanybrowserthatisadvertisedasJava-enabled.Unfortunately,realityhasbeendifferent.VariousversionsofNetscapeandInternetExplorerrundifferentversionsofJava,someofwhichareseriouslyoutdated.ThissorrysituationmadeitincreasinglydifficulttodevelopappletsthattakeadvantageofthemostcurrentJavaversion.Toremedythisproblem,SunhasdevelopedtheJavaPlug-in,atoolthatmakesthenewestJavaruntimeenvironmentavailabletobothNetscapeandInternetExplorerWhentheuserdownloadsanapplet,itworksmuchlikeembeddinganimageinawebpage.Theappletbecomesapartofthepage,andthetextflowsaroundthespaceusedfortheapplet.Thepointis,theimageisalive.Itreactstousercommands,changesitsappearance,andsendsdatabetweenthecomputerpresentingtheappletandthecomputerservingit.agoodexampleofadynamicwebpage—anapplettoviewmolecules—thatcarriesoutsophisticatedcalculations.Byusingthemouse,youcanrotateandzoomeachmoleculetobetterunderstanditsstructure.Thiskindofdirectmanipulationisnotachievablewithstaticwebpages,butappletsmakeitpossible.CommonMisconceptionsAboutJavaThisisalistofsomecommonmisconceptionsaboutJava,alongwithcommentary.JavaisanextensionofHTML.Javaisaprogramminglanguage;HTMLisawaytodescribethestructureofawebpage.TheyhavenothingincommonexceptthatthereareHTMLextensionsforplacingJavaappletsonawebpage.IuseXML,soIdon'tneedJava.Javaisaprogramminglanguage;XMLisawaytodescribedata.YoucanprocessXMLdatawithanyprogramminglanguage,buttheJavaAPIcontainsexcellentsupportforXMLprocessing.Inaddition,manyimportantthird-partyXMLtoolsareimplementedinJava.SeeVolume2formoreinformation.Javaisaneasyprogramminglanguagetolearn.Nopro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師公開課件制作培訓(xùn)
- 圖文施工現(xiàn)場平面布置
- 幼兒園安全隱患排查預(yù)案
- 初四六班上學(xué)期第一次家長會課件
- 商用建筑屋頂光伏發(fā)電施工方案
- 浙大建設(shè)法規(guī)與合同管理作業(yè)
- 企業(yè)員工法律知識培訓(xùn)
- 文化機構(gòu)弱電智能化會議系統(tǒng)建設(shè)方案
- 疫情防控期間在線學(xué)習(xí)支持方案
- 文化藝術(shù)項目合作協(xié)議書
- 設(shè)備部防異物(1)
- 管樁水平承載力計算
- 國美香港借殼上市過程及策略分析
- 污水處理站過濾罐濾料更換方案
- 攝影基礎(chǔ)知識入門與技術(shù).ppt
- 民事案件卷宗目錄封面11
- 2022年2022年古籍樣式排版模板
- 藝術(shù)裝飾藝術(shù)運動
- 樊登讀書會營銷策略分析
- 建設(shè)單位安全生產(chǎn)管理體系(完整版)
- 國潮風(fēng)喜迎中秋節(jié)傳統(tǒng)節(jié)日介紹主題班會PPT模板
評論
0/150
提交評論