雖然催生Java的源動(dòng)力是可移植性和安全性,但是在其最終成型的過程中其他因素也起了重要作用,下面是Java開發(fā)小組總結(jié)的Java的關(guān)鍵特性(設(shè)計(jì)目標(biāo)):
(1)簡(jiǎn)單(Simple)——易學(xué)好用,繼承了C/C++的語法和許多C++的面向?qū)ο筇卣鳌Hサ袅薈++中的一些復(fù)雜困難的東西(如頭文件、預(yù)處理、結(jié)構(gòu)、聯(lián)合、多重繼承、操作符重載、[模板]等),使語言更加精簡(jiǎn)。
(2)安全(Secure)——為了適應(yīng)分布式網(wǎng)絡(luò)環(huán)境,采用基于策略(policy)的沙箱(sandbox)模型,在語言層次上實(shí)現(xiàn)了安全性。具有如下三個(gè)方面的安全保證:語言特性(包括檢查數(shù)組邊界、限制類型轉(zhuǎn)換、取消指針變量等)、資源訪問控制(包括本地文件系統(tǒng)訪問和連接訪問網(wǎng)絡(luò)等)和代碼數(shù)字簽名(通過數(shù)字簽名確認(rèn)源代碼源以及代碼是否完整)。
(3)可移植(Portable)——定長(zhǎng)的整數(shù)型類型,如int始終為32位,而C/C++中的int在Win16、Win32和Win64平臺(tái)上分別為16位、32位和64位。固定的多字節(jié)整數(shù)二進(jìn)制格式,采用統(tǒng)一的高位字節(jié)在前的方案(Intel CPU中的多字節(jié)整數(shù)的低位字節(jié)在前)。統(tǒng)一的用戶界面(AWT/Swing [/SWT])。
(4)面向?qū)ο螅∣bject Oriented)——由于沒有設(shè)計(jì)C++時(shí)兼容C的負(fù)擔(dān),從零開始設(shè)計(jì)的Java具有更純潔的OOP特性。但是為了高性能,仍然保留了基本數(shù)據(jù)類型的非對(duì)象性。在OOP方面與C++的區(qū)別主要有單一類繼承、接口、反射等。
(5)健壯(Robust)——異構(gòu)網(wǎng)絡(luò)環(huán)境要求程序可靠運(yùn)行。采用的措施有:避免內(nèi)存錯(cuò)誤(取消指針變量、提供內(nèi)存管理——自動(dòng)分配和釋放內(nèi)存[垃圾內(nèi)存自動(dòng)回收])、強(qiáng)制異常處理等,可對(duì)潛在的問題進(jìn)行早期和動(dòng)態(tài)的檢查。
(6)多線程(Multithreaded)——交互式網(wǎng)絡(luò)化的多任務(wù)程序(如Web服務(wù)器)及多核CPU都要求多線程。Java提供了語言級(jí)的多線程支持,JVM也具有成熟的線程同步解決方案。
(7)體系結(jié)構(gòu)中立(Architecture Neutral)——通過JVM和字節(jié)碼,Java實(shí)現(xiàn)了體系結(jié)構(gòu)中立(與計(jì)算機(jī)硬件和操作系統(tǒng)無關(guān))。跨平臺(tái)是Java最重要的特征和最大的優(yōu)點(diǎn),“一次編寫、到處運(yùn)行”(Write Once, Run Anywhere,WORA)是Java的口號(hào)。正是跨平臺(tái)的特點(diǎn),使得Java語言特別適合于網(wǎng)絡(luò)編程。
(8)解釋型(Interpreted)——與Fortran、Pascal、C/C++等編譯型高級(jí)語言不同,Java是一種(編譯性)解釋語言:Java語言的源程序(*.java),先通過Java編譯器編譯成特殊的字節(jié)碼(*.class),然后由目標(biāo)機(jī)上JVM將字節(jié)碼解釋(翻譯成本機(jī)CPU指令代碼)執(zhí)行。解釋型是JVM的需要,也是跨平臺(tái)的基礎(chǔ)。
(9)高性能(High Performance)——與追求速度的編譯型語言相比,解釋型語言在本質(zhì)上是低性能的,這也是Java語言跨平臺(tái)的代價(jià)。為了克服Java程序運(yùn)行慢的缺點(diǎn),可用JIT(Just-In-Time,及時(shí))編譯器,在程序的第一次運(yùn)行時(shí)將(部分)字節(jié)碼先轉(zhuǎn)換成本機(jī)代碼,以提高Java程序的運(yùn)行速度。
(10)分布式(Distributed)或理解網(wǎng)絡(luò)(Network-Savvy)——Java是為因特網(wǎng)的分布式環(huán)境設(shè)計(jì)的,所以它支持TCP/IP協(xié)議、URL資源訪問和RMI(Remote Method Invocation,遠(yuǎn)程方法調(diào)用)。
(11)動(dòng)態(tài)(Dynamic)——Java程序帶有大量運(yùn)行時(shí)的類型信息,用于在運(yùn)行時(shí)的驗(yàn)證和解決對(duì)象的訪問問題。這使得在安全有效的方式下動(dòng)態(tài)連接代碼成為可能。程序員可從因特網(wǎng)上下載代碼運(yùn)行(瀏覽器),可全面控制對(duì)象的行為,如在特定的系統(tǒng)要求下,在運(yùn)行時(shí)分析對(duì)象(如GUI構(gòu)建器、智能調(diào)試器、可插式組件、對(duì)象數(shù)據(jù)庫(kù)等)。
Java語言主要優(yōu)勢(shì)是跨平臺(tái)和安全(及類庫(kù)豐富),主要缺點(diǎn)是運(yùn)行速度慢和圖形界面較差,主要適用范圍是(服務(wù)器端的)網(wǎng)絡(luò)編程。
新聞熱點(diǎn)
疑難解答