什么是Java?
可以把Java作為看起來(lái)很像C和C ++通用的面向?qū)ο蟮恼Z(yǔ)言,但它更容易使用,并可以創(chuàng)建更健壯的程序。
Java是一種簡(jiǎn)單的,面向?qū)ο蟮?,網(wǎng)絡(luò)的悟性,理解,可靠,安全,結(jié)構(gòu)中立的,可移植,高性能,多線程的,動(dòng)態(tài)的計(jì)算機(jī)語(yǔ)言。
讓我們考慮各自獨(dú)立這些定義的:
? Java是一種簡(jiǎn)單的語(yǔ)言。Java的C和C ++,減去一些潛在的混亂后的功能最初模型。指針,實(shí)現(xiàn)多繼承和操作符重載一些C / C ++功能,是Java的一部分。一個(gè)功能用C未被授權(quán)/ C ++,但重要的去渣,是一個(gè)垃圾收集設(shè)施,自動(dòng)回收對(duì)象和數(shù)組。
? Java是一種面向?qū)ο蟮恼Z(yǔ)言。Java的面向?qū)ο蟮木劢棺岄_(kāi)發(fā)者對(duì)Java的調(diào)整來(lái)解決問(wèn)題,而不是迫使我們操縱問(wèn)題,滿足語(yǔ)言的約束工作。這是和C的結(jié)構(gòu)化語(yǔ)言不同。例如,而Java可以讓你專注于儲(chǔ)蓄賬戶對(duì)象,C需要你對(duì)儲(chǔ)蓄賬戶分別認(rèn)為狀態(tài)(這種平衡)和行為(如存款和取款)。
? Java是一種網(wǎng)絡(luò)語(yǔ)言的悟性。Java的廣泛的網(wǎng)絡(luò)庫(kù),可以輕松應(yīng)付傳輸控制協(xié)議/ Internet協(xié)議(TCP / IP)網(wǎng)絡(luò)協(xié)議,如HTTP(超文本傳輸協(xié)議)和FTP(文件傳輸協(xié)議),并簡(jiǎn)化了建立網(wǎng)絡(luò)連接的任務(wù)。此外,Java程序可在一個(gè)TCP / IP網(wǎng)絡(luò)訪問(wèn)的對(duì)象,通過(guò)統(tǒng)一資源定位器(URL),用相同的方便,你將有從本地文件系統(tǒng)訪問(wèn)它們。
? Java是一種解釋型語(yǔ)言。在運(yùn)行時(shí),一個(gè)Java程序間接執(zhí)行經(jīng)由虛擬機(jī)的基礎(chǔ)平臺(tái)(如Windows或Linux)(這是一個(gè)假設(shè)的平臺(tái)的軟件表示)和相關(guān)的執(zhí)行環(huán)境上。虛擬機(jī)轉(zhuǎn)換Java程序的字節(jié)碼通過(guò)解釋(指令和相關(guān)的數(shù)據(jù)),以特定平臺(tái)的說(shuō)明。解釋是搞清楚一個(gè)字節(jié)碼指令的意思,然后選擇相當(dāng)于“固定的”特定于平臺(tái)的指令來(lái)執(zhí)行的行為。虛擬機(jī)然后執(zhí)行這些特定平臺(tái)的說(shuō)明。
解讀使得它更容易出現(xiàn)故障調(diào)試Java程序,因?yàn)楦嗟木幾g時(shí)間信息是在運(yùn)行時(shí)可用。解讀也使得它可以延遲到運(yùn)行時(shí),這將加快開(kāi)發(fā)Java程序的部件之間的鏈接步驟。
? Java是一個(gè)健壯的語(yǔ)言。因?yàn)樗鼈冊(cè)谙M(fèi)者和任務(wù)關(guān)鍵型應(yīng)用,從藍(lán)光播放器到車載導(dǎo)航或空氣控制系統(tǒng),Java程序必須是可靠的。語(yǔ)言功能,幫助使Java健壯包括申報(bào),重復(fù)的類型在編譯時(shí)和運(yùn)行時(shí)檢查(防止版本不匹配的問(wèn)題),具有自動(dòng)邊界檢查真正的數(shù)組和指針的遺漏。(我們將討論所有的在后面的系列詳細(xì)介紹這些功能。)
Java的魯棒性的另一個(gè)方面是,循環(huán)必須由布爾表達(dá)式,而不是整數(shù)表達(dá)式進(jìn)行控制,其中0為假,非零值是true。例如,Java不允許C風(fēng)格的循環(huán),如while (x) x++;因?yàn)檠h(huán)可能不會(huì)顯示在預(yù)期的位置。相反,你必須明確提供一個(gè)布爾表達(dá)式,如while (x != 10) x++;(這意味著循環(huán)將運(yùn)行,直到x等于10)。
? Java是一個(gè)安全的語(yǔ)言。Java程序在網(wǎng)絡(luò)/分布式環(huán)境中使用。因?yàn)镴ava程序可以移植到和執(zhí)行在網(wǎng)絡(luò)上的各種平臺(tái),它以保護(hù)免受惡意代碼的這些平臺(tái)可能會(huì)傳播病毒,盜取信用卡信息,或執(zhí)行其他惡意行為是很重要的。支持魯棒性(如指針的遺漏)Java語(yǔ)言特性與安全功能,如Java沙箱安全模型和公鑰加密工作。這些功能共同阻止病毒和其他危險(xiǎn)的代碼從不知情的平臺(tái)上肆虐。
在理論上,Java是安全的。在實(shí)踐中,已經(jīng)發(fā)現(xiàn)并利用各種安全漏洞。其結(jié)果是,Sun微系統(tǒng)則和Oracle現(xiàn)在繼續(xù)發(fā)布安全更新。
? Java是一種體系結(jié)構(gòu)中立的語(yǔ)言。網(wǎng)絡(luò)連接基于各種微處理器和操作系統(tǒng)不同的架構(gòu)平臺(tái)。你不能指望Java來(lái)生成特定平臺(tái)的說(shuō)明,并有“理解”的是網(wǎng)絡(luò)的一部分各類平臺(tái)上這些指令。相反,Java的產(chǎn)生,很容易為每個(gè)平臺(tái)來(lái)解釋(通過(guò)其實(shí)施的JVM)與平臺(tái)無(wú)關(guān)的字節(jié)碼指令。
? Java是一種可移植的語(yǔ)言。體系結(jié)構(gòu)中立利于便攜。但是,還有更多的Java的可移植性不是獨(dú)立于平臺(tái)的字節(jié)碼指令??紤]到整數(shù)類型大小必須不會(huì)改變。例如,32位整數(shù)類型必須始終進(jìn)行簽名和占用32位,而不管其中的32位整數(shù)進(jìn)行處理(例如,用16位寄存器的平臺(tái),與32位寄存器的平臺(tái)或平臺(tái)的64位寄存器)。Java的庫(kù)也有助于便攜性。必要時(shí),它們提供了在可能的最輕便的方式特定于平臺(tái)的功能,連接Java代碼的類型。
? Java是一個(gè)高性能的語(yǔ)言。解讀產(chǎn)生的性能水平,通常是綽綽有余。對(duì)于非常高性能的應(yīng)用場(chǎng)景Java使用即時(shí)編譯,從而分析解釋的字節(jié)碼指令序列,并編譯經(jīng)常解釋指令序列特定平臺(tái)的說(shuō)明。后續(xù)嘗試解讀這些字節(jié)代碼指令序列產(chǎn)生的等效特定平臺(tái)的指令,從而提高性能的執(zhí)行。
? Java是一個(gè)多線程的語(yǔ)言。為了提高必須完成一次幾項(xiàng)任務(wù)程序的性能,Java支持的概念線程執(zhí)行。例如,管理在等待網(wǎng)絡(luò)連接輸入一個(gè)圖形用戶界面(GUI)程序使用另一個(gè)線程,而不是執(zhí)行使用默認(rèn)的GUI線程對(duì)于這兩項(xiàng)任務(wù)的等待。這使GUI作出響應(yīng)。Java的同步原語(yǔ)允許的線程安全地溝通彼此之間數(shù)據(jù)而不造成數(shù)據(jù)損壞。(見(jiàn)中的Java線程編程在Java 101系列其他地方討論。)
? Java是一種動(dòng)態(tài)語(yǔ)言。因?yàn)槌绦虼a和代碼庫(kù)之間的互連在運(yùn)行時(shí)動(dòng)態(tài)地發(fā)生,這是沒(méi)有必要明確鏈接它們。其結(jié)果是,當(dāng)一個(gè)程序或它的庫(kù)演變中的一個(gè)(例如,對(duì)于一個(gè)錯(cuò)誤修復(fù)或性能改進(jìn)),顯影劑只需要分發(fā)更新的程序或庫(kù)。雖然在以下代碼動(dòng)態(tài)行為的結(jié)果,當(dāng)一個(gè)版本發(fā)生改變時(shí)分發(fā),這種分布策略也可導(dǎo)致版本沖突。例如,開(kāi)發(fā)人員從庫(kù)中的類類型,或?qū)⑵渲孛?。?dāng)一個(gè)公司分配更新的庫(kù),依賴于類的類型現(xiàn)有的計(jì)劃將會(huì)失敗。大大降低這一問(wèn)題,Java支持的接口類型,這就好比雙方之間的合同。(參見(jiàn)接口,類型和其它面向?qū)ο蟮恼Z(yǔ)言功能在Java 101系列其他地方討論。)