Java程序員的高薪使得很多人羨慕不已,有很多人就是沖著Java的高薪從而學(xué)習(xí)的。但是你們知道Java程序員的工資高的原因嗎,或者說(shuō)java編程語(yǔ)言比其他編程好到哪里?才讓這么多人來(lái)學(xué)習(xí)它呢?本文將為大家做詳細(xì)分析。
Java編程語(yǔ)言比其他編程好在那里?
Java刪除了許多極少被使用、不容易理解和容易令人混淆的C++功能。刪除的功能主要包括運(yùn)算符重載、多重繼承以及廣泛的自動(dòng)強(qiáng)迫同型。與C++相比,Java語(yǔ)言也提供重載函數(shù),不過(guò)它重載的對(duì)象是函數(shù)而非變量或是運(yùn)算符。Java的目標(biāo)之一是要協(xié)助開發(fā)能獨(dú)立地在小型機(jī)器上順利執(zhí)行的軟件。Java的基本解釋器和對(duì)象類支持約占40KB空間,而若增加基本的標(biāo)準(zhǔn)程序庫(kù)和線程支持則需增加約175KB。體積小對(duì)于在嵌入式系統(tǒng)中的使用是很重要的,正因?yàn)檫@樣,Java才能夠通過(guò)網(wǎng)絡(luò)輕易下載。下面來(lái)說(shuō)一下java編程的優(yōu)點(diǎn),也是他為什么比其他編程好的原因。
(1)Java是健壯的:
Java的目標(biāo)是要協(xié)助開發(fā)人員建立各方面可靠的程序,Java強(qiáng)調(diào):開發(fā)人員可在設(shè)計(jì)初期即檢查可能存在的問(wèn)題,其后則進(jìn)行動(dòng)態(tài)的檢查,并排除容易出現(xiàn)的錯(cuò)誤。C++語(yǔ)言的優(yōu)點(diǎn)是允許在編譯時(shí)進(jìn)行深入的檢查,以便提前發(fā)現(xiàn)錯(cuò)誤。Java與C/C++之間最大的不同點(diǎn)之一在于Java擁有一種模型,能排除內(nèi)存被覆蓋和毀損數(shù)據(jù)的可能性。Java不采用指針計(jì)算法,而是提供真正的數(shù)組陣列。這允許程序執(zhí)行下標(biāo)檢查,但它不允許將一個(gè)整數(shù)轉(zhuǎn)成指針的情形發(fā)生。
(2)Java是面向?qū)ο蟮恼Z(yǔ)言:
面向?qū)ο笫窃跇I(yè)界中一度流行的術(shù)語(yǔ)之一。不過(guò),它確定是一項(xiàng)很強(qiáng)的設(shè)計(jì)功能,它可以促成明確的接口定義,并允許開發(fā)人員建立可重復(fù)使用的軟件部件。
(3)Java是分布式語(yǔ)言:
Java擁有廣泛的能輕易地處理TCP/IP協(xié)議的運(yùn)行庫(kù),例如HTTP與FTP類庫(kù)等等。這使得在Java中比在C或C++中更容易建立網(wǎng)絡(luò)連接。Java應(yīng)用程序可以借助URL通過(guò)網(wǎng)絡(luò)開啟和存取對(duì)象,就如同存取一個(gè)本地文件系統(tǒng)一樣簡(jiǎn)單。
(4)Java的安全性:
Java設(shè)計(jì)的目的是要能夠使用于網(wǎng)絡(luò)/分布式運(yùn)算環(huán)境。為此,Java非常強(qiáng)調(diào)安全性,以確保建立無(wú)病毒且不會(huì)被侵入的系統(tǒng)。Java的驗(yàn)證技術(shù)是以公鑰加密法為基礎(chǔ)。鍵壯性與安全性之間存在一種很強(qiáng)的相互作用關(guān)系。例如,指針語(yǔ)意的改變,讓應(yīng)用程序不可能偽造對(duì)象結(jié)構(gòu)存取權(quán),或存取它們?cè)趯?duì)象中沒(méi)有存取權(quán)的?數(shù)據(jù)。這等于關(guān)上大門,杜絕大多數(shù)病毒的侵入。
(5)Java的中立性結(jié)構(gòu):
Java的設(shè)計(jì)目標(biāo)是要支持網(wǎng)絡(luò)應(yīng)用程序。一般而言,網(wǎng)絡(luò)是由許多不同的平臺(tái)系統(tǒng)構(gòu)成,包括各種CPU與操作系統(tǒng)結(jié)構(gòu)。為了讓Java應(yīng)用程序能夠在網(wǎng)絡(luò)上任何地方執(zhí)行,其編譯器將會(huì)生成一種具備結(jié)構(gòu)中立性的目標(biāo)文件格式。編譯后的程序碼可以在提供Java運(yùn)行系統(tǒng)的多種不同處理器上面執(zhí)行。Java的這種中立性結(jié)構(gòu)不僅對(duì)網(wǎng)絡(luò)應(yīng)用很有幫助,而且也很適合單一的系統(tǒng)軟件流通。
結(jié)構(gòu)中立性是確保程序可移植的最重要部份,不過(guò)除此之外還需很多必須配合的條件和C與C++不同的是,Java規(guī)范中并無(wú)任何與機(jī)器結(jié)構(gòu)相依存的陳述存在。它指定了基本數(shù)據(jù)類型的大小,及其算術(shù)運(yùn)算元的執(zhí)行行為。例如:“int”代表一個(gè)有符號(hào)的二進(jìn)制補(bǔ)碼32Bit整數(shù),而“float”代表一個(gè)32BitIEEE754浮點(diǎn)數(shù)。這些選擇在今天的環(huán)境很適用,因?yàn)閹缀跛蠧PU都具備這些特性。程序運(yùn)行庫(kù)屬于系統(tǒng)的一部份,它定義了一些可移植的程序接口。例如,它包括一個(gè)抽象的Windows類,并且提供了該類在Unix、Windows和Macintosh平臺(tái)上的實(shí)現(xiàn)。
(6)高效能的Java程序:
雖然解決過(guò)的字節(jié)代碼性能已相當(dāng)不錯(cuò),不過(guò)有些情形下還是要求程序達(dá)到更高執(zhí)行效能。字節(jié)代碼可以動(dòng)態(tài)地解釋為執(zhí)行應(yīng)用程序特定CPU的機(jī)器碼。這對(duì)于習(xí)慣使用一般編譯器與動(dòng)態(tài)載人器的程序設(shè)計(jì)者而言,有點(diǎn)類似將最終的機(jī)器碼生成器放到動(dòng)態(tài)載入器之內(nèi)。
字節(jié)代碼格式在設(shè)計(jì)上即已考慮了機(jī)器碼的產(chǎn)生,因此實(shí)際的機(jī)器碼生成程序相當(dāng)簡(jiǎn)單。其生成的機(jī)器碼是有效的,編譯器自動(dòng)分配寄存器,而在生成字節(jié)代碼期間也會(huì)進(jìn)行一些優(yōu)化。我們以解決碼在一臺(tái)SunMicrosystemSPARCStation10上執(zhí)行時(shí),達(dá)到每秒三十萬(wàn)個(gè)函數(shù)調(diào)用速率。字節(jié)代碼轉(zhuǎn)換至機(jī)器碼的速度性能,幾乎和直接生成機(jī)器目標(biāo)代碼的C或C++沒(méi)有什么兩樣。
(7)Java是解釋執(zhí)行的:
Java解決器可以直接在任何已移植該解釋器的機(jī)器上解釋、執(zhí)行Java字節(jié)代碼。再者,由于其鏈接過(guò)程比較傾向于逐步增量與輕量過(guò)程,因此程序開發(fā)更快、更精密。
(8)Java對(duì)多線程的支持
Java擁有一組復(fù)雜的同步化基本單元,它們是以廣泛使用的C.A.R.Hoare監(jiān)視器與條件變量圖為基礎(chǔ)的。將這些概念融合到語(yǔ)言中之后,它們就變得更容易使用且更為健壯。這種融合方式大部分來(lái)自Xerox的Cedar/Mesa系統(tǒng)。
多線程所帶來(lái)的其它好處包括更好的交互式回應(yīng)能力與實(shí)時(shí)運(yùn)行能力。然而這會(huì)受到底層平臺(tái)的限制:獨(dú)立執(zhí)行的Java運(yùn)行環(huán)境有著很好的實(shí)時(shí)執(zhí)行能力,而若在其他系統(tǒng)例如Unix、Windows、Macintosh或WindowsNT等平臺(tái)上執(zhí)行時(shí),則會(huì)由于底層平臺(tái)的原因而使實(shí)時(shí)響應(yīng)能力受到影響。