Java与C/C++的比较(转)
原文鏈接:Java和c++比較
總結(jié)一下Java的小知識(shí),只是想稍微提醒一下自己這些基礎(chǔ)的東西,放在這里,隨時(shí)可以閱覽和添加一下,以免走錯(cuò)了方向。
1.面向?qū)ο蟪绦蛟O(shè)計(jì)
面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言可以直觀的反映客觀世界的真實(shí)表象,使軟件開(kāi)發(fā)人員可運(yùn)用人類認(rèn)識(shí)事物所采用的一般思維方式來(lái)進(jìn)行軟件開(kāi)發(fā),與自然語(yǔ)言差距最小,是當(dāng)今軟件開(kāi)發(fā)與應(yīng)用的主流技術(shù)。Java是純面向?qū)ο蟮木幊陶Z(yǔ)言。
2.幾個(gè)概念
a.JavaApplication–用來(lái)開(kāi)發(fā)命令行程序、窗體程序、服務(wù)器端程序等。
b.JavaApplet–是一種嵌入到Web頁(yè)面的網(wǎng)絡(luò)應(yīng)用程序,由瀏覽器內(nèi)部的Java解釋器來(lái)解釋運(yùn)行,這個(gè)其實(shí)我覺(jué)得現(xiàn)在用得很少。
c.JavaServlet–運(yùn)行于Web服務(wù)器端的Java程序,可以與客戶端的Applet或者HTML頁(yè)面進(jìn)行交互。
d.JSP–用于生成動(dòng)態(tài)網(wǎng)頁(yè),基于Servlet技術(shù),在HTML文件中加入Java程 序片段(Scriptlet)和JSP標(biāo)記??蓪?shí)現(xiàn)程序與頁(yè)面格式控制的分離。
3. 多線程機(jī)制
a.線程又被稱為輕量進(jìn)程,是比傳統(tǒng)進(jìn)程更小的并且可以并發(fā)執(zhí)行的單位。多個(gè)線程可以共用一個(gè)內(nèi)存區(qū)域,共享同一組系統(tǒng)資源,其間通信和切換的系統(tǒng)開(kāi)銷要遠(yuǎn)遠(yuǎn)小于進(jìn)程。
b.Java環(huán)境本身就是多線程的,若干個(gè)線程運(yùn)行,負(fù)責(zé)必要的無(wú)用單元回收,系統(tǒng)維護(hù)等系統(tǒng)級(jí)操作;
c.Java提供了一個(gè)Thread類和一組內(nèi)置方法對(duì)線程進(jìn)行實(shí)時(shí)并發(fā)控制。
4.Java與C/C++的比較
1) 概述
Java其實(shí)也是由C++發(fā)展而來(lái),保留了C++的大部分內(nèi)容,其編程方式類似于C++,但是摒棄了C++的諸多不合理之處,從根本上解決了C++的固有缺陷。使得Java句法更清晰,規(guī)模更小,更易學(xué),同時(shí)更趨于健壯性,安全性和平臺(tái)無(wú)關(guān)性。
a.全局變量:C++將函數(shù)和變量定義為全局的,而不加封裝,增加了程序的負(fù)擔(dān) ,并且往往會(huì)由于使用不當(dāng)而造成系統(tǒng)的崩潰。
b.Java是完全面向?qū)ο蟮恼Z(yǔ)言,類將方法和數(shù)據(jù)封裝在其內(nèi),不能在所 用的類之外定義程序的全局變量,只能通過(guò)在一個(gè)類中定義public static的變量來(lái)實(shí)現(xiàn)一個(gè)全局變量,使得其它類可以訪問(wèn)和修改該變量。這種完善的包裝保證了系統(tǒng)的安全性。
2) goto語(yǔ)句
a.goto語(yǔ)句一般用于無(wú)條件轉(zhuǎn)移子程序和多結(jié)構(gòu)分支技術(shù),是C++中的合法語(yǔ)句,造成了程序結(jié)構(gòu)的混亂,不易理解。
b.Java不提供goto語(yǔ)句,使得程序更簡(jiǎn)潔易讀,增強(qiáng)了程序的健壯性。
3) 指針
a.指針是C++語(yǔ)言中最靈活也最容易出錯(cuò)的數(shù)據(jù)類型,易出現(xiàn)由于指針誤操作而導(dǎo)致的系統(tǒng)崩潰,同時(shí)指針操作內(nèi)存時(shí)也經(jīng)常出錯(cuò)。
b.Java沒(méi)有指針的概念,更有利于程序的安全。
4) 內(nèi)存管理
a.C++語(yǔ)言中必須通過(guò)程序釋放內(nèi)存資源,增加了程序設(shè)計(jì)者的負(fù)擔(dān),再次釋放已釋放的內(nèi)存塊或釋放未分配的內(nèi)存塊會(huì)造成系統(tǒng)崩潰,忘記釋放不再使用的內(nèi)存塊也會(huì)逐漸耗盡系統(tǒng)資源。
b.Java自動(dòng)進(jìn)行內(nèi)存回收操作,當(dāng)一個(gè)對(duì)象不再被用到時(shí),無(wú)須使用內(nèi)存回收器,只需要給它加上標(biāo)簽以示刪除。無(wú)用內(nèi)存的回收器在后臺(tái)運(yùn)行,利用空閑時(shí)間工作,保證了系統(tǒng)資源的完整性,避免了內(nèi)存管理不周而引起的系統(tǒng)崩潰。
5) 數(shù)據(jù)類型的一致性
a.在C++語(yǔ)言中,不同的平臺(tái)上,編譯器對(duì)簡(jiǎn)單數(shù)據(jù)類型分別分配不同的字節(jié)數(shù),導(dǎo)致了代碼數(shù)據(jù)的不可移植性。
b.在Java中,采用基于IEEE標(biāo)準(zhǔn)的數(shù)據(jù)類型,無(wú)論任何硬件平臺(tái)上對(duì)數(shù)據(jù)類型的位數(shù)分配總是固定的。
6) 類型轉(zhuǎn)換
a.在C++中,會(huì)出現(xiàn)數(shù)據(jù)類型的隱含轉(zhuǎn)換,涉及到自動(dòng)強(qiáng)制類型轉(zhuǎn)換,使得不安全因素大大增加。
b.Java中系統(tǒng)要對(duì)對(duì)象的處理進(jìn)行嚴(yán)格的相容性檢查,防止不安全的轉(zhuǎn)換。如果需要,必須由程序顯式進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
7) 頭文件
a.在C++語(yǔ)言中使用頭文件聲明類的原型和全局變量及庫(kù)函數(shù)等,使得在大系統(tǒng)中對(duì)頭文件的維護(hù)非常困難。
b.Java不支持頭文件,類成員的類型和訪問(wèn)權(quán)限都封裝在類中,運(yùn)行時(shí) 系統(tǒng)對(duì)訪問(wèn)進(jìn)行控制,防止非法訪問(wèn)。
8) 結(jié)構(gòu)和聯(lián)合
a.C++中用結(jié)構(gòu)和聯(lián)合來(lái)表示一定的數(shù)據(jù)結(jié)構(gòu),其成員的公有性帶來(lái)了安全隱患。
b.Java不支持結(jié)構(gòu)和聯(lián)合,通過(guò)類把數(shù)據(jù)結(jié)構(gòu)及對(duì)該數(shù)據(jù)的操作封裝在類中。
9) 預(yù)處理
a.C++在編譯過(guò)程中都有一個(gè)預(yù)編譯階段,即預(yù)處理器,為開(kāi)發(fā)人員提供了方便,但也增加了編譯的復(fù)雜性。
b.Java允許預(yù)處理,但不支持預(yù)處理器功能,提供import語(yǔ)句實(shí)現(xiàn)類似 的功能。
10) 多重繼承
a.C++支持多重繼承,允許許多父類派生一個(gè)子類,雖然功能強(qiáng)大,但使用復(fù)雜,而且會(huì)引起許多麻煩,編譯程序?qū)崿F(xiàn)也很不易。
b.Java不支持多重繼承,但允許一個(gè)類實(shí)現(xiàn)多個(gè)接口,即實(shí)現(xiàn)了C++的多重繼承功能,又避免了C++的缺陷。
11) 操作符重載
a.操作符重載被認(rèn)為是C++的突出特征。
b.為了保持Java語(yǔ)言盡可能的簡(jiǎn)單,Java不支持操作符重載。
12) 函數(shù)
a.在C中,代碼組織在函數(shù)中,函數(shù)可以訪問(wèn)程序的全局變量; C++增加了類,提供了類方法,但由于C++仍然支持C,所以C++程序中仍然可以使用C的函數(shù),結(jié)果導(dǎo)致函數(shù)和方法混合使用,使得程序比較混亂 。
b.Java沒(méi)有函數(shù)。作為一種比C++更純的面向?qū)ο蟮恼Z(yǔ)言,強(qiáng)迫開(kāi)發(fā)人員把所有例行程序包括在類中,可以更好的組織編碼。
13) 字符串
a.C++不支持字符串變量,使用“Null”終止符代表字符串的結(jié)束。
b.Java字符串類作為Java語(yǔ)言的一部分定義,而不是作為外加的延伸部分,在整個(gè)系統(tǒng)中建立字符串和訪問(wèn)字符串元素的方法是一致的。
?
轉(zhuǎn)載于:https://www.cnblogs.com/gaopeng527/p/5259446.html
總結(jié)
以上是生活随笔為你收集整理的Java与C/C++的比较(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【BZOJ】1070: [SCOI200
- 下一篇: IIC时序图