詳情描述
Java是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,他在C的基礎(chǔ)上發(fā)展起來(lái),吸收了C的各種優(yōu)點(diǎn),又摒棄了C中很多難以理解的知識(shí)點(diǎn)。那么Java與C的區(qū)別具體有哪些呢?且聽(tīng)千鋒小編給你慢慢道來(lái)。
Java具有簡(jiǎn)單性、面向?qū)ο蟆⒎植际?、健壯性、安全性、平臺(tái)獨(dú)立與可移植性、多線(xiàn)程、動(dòng)態(tài)性等特點(diǎn)。Java可以編寫(xiě)桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
C是C語(yǔ)言的繼承,它既可以進(jìn)行C語(yǔ)言的過(guò)程化程序設(shè)計(jì),又可以進(jìn)行以抽象數(shù)據(jù)類(lèi)型為特點(diǎn)的基于對(duì)象的程序設(shè)計(jì),還可以進(jìn)行以繼承和多態(tài)為特點(diǎn)的面向?qū)ο蟮某绦蛟O(shè)計(jì)。C擅長(zhǎng)面向?qū)ο蟪绦蛟O(shè)計(jì)的同時(shí),還可以進(jìn)行基于過(guò)程的程序設(shè)計(jì),因而C就適應(yīng)的問(wèn)題規(guī)模而論,大小由之。
1、Java與C在面向?qū)ο蟾拍钌系膮^(qū)別
在C當(dāng)中,存在類(lèi)內(nèi)靜態(tài)成員變量的問(wèn)題和Java其實(shí)是一致的,但是C仍抱有C語(yǔ)言特性,static生命仍具有全局概念。Java當(dāng)中已經(jīng)不存在所謂的全局概念了,更準(zhǔn)確的說(shuō)是通過(guò)類(lèi)邊界,將全局概念隱藏了。作用雖然一致,但是Java在于static提供類(lèi)共享的時(shí)候,可能并沒(méi)有C來(lái)做的判斷合適
2、Java與C在代碼使用上的區(qū)別
這個(gè)也很多人忽略,語(yǔ)言只是工具,只要按照算法做就是了,但是工具可是各有各的特點(diǎn),往往也被忽略掉了。
舉一個(gè)例子:空指針判斷,數(shù)組越界,異常,斷言
可能上面說(shuō)的,在于C而言要完全控制的,如果不控制就會(huì)出大問(wèn)題,直接對(duì)應(yīng)到內(nèi)存的異常。可是Java而言,由于是純面向?qū)ο笳Z(yǔ)言,加上完整的基于虛擬機(jī)的異??刂?,使得數(shù)組越界而言可能并不是什么大問(wèn)題,throws一個(gè)Exception和內(nèi)存異常比較起來(lái)反而小的多,可見(jiàn)Java對(duì)于內(nèi)存的隱藏優(yōu)勢(shì)。
3、Java與C在代碼組織上的區(qū)別
看C代碼,給我一個(gè)很深刻的印象就是,我能很準(zhǔn)確的看懂他的組織形式和功能。然而Java我需要充分理解類(lèi)之間的層次結(jié)構(gòu)和邊界問(wèn)題,往往搭建庫(kù)的時(shí)候映射到上層,很難通透的看出整個(gè)的形式和功能,只能基于類(lèi)的調(diào)用來(lái)梳理。
由此也可以看出C還是遺傳了C語(yǔ)言的特性,是一個(gè)基于文檔目錄結(jié)構(gòu)來(lái)做代碼組織的。雖然有了面向?qū)ο筇匦?,但是就面向?qū)ο笾皇墙oC一種代碼服用以及設(shè)計(jì)時(shí)邏輯區(qū)分。然而對(duì)于Java而言,面向?qū)ο罂墒秦瀼厥冀K的。
舉一個(gè)例子:C頭文件的引入
很多人不太習(xí)慣為什么我寫(xiě)一個(gè)類(lèi),還要引入頭文件,和Java類(lèi)似寫(xiě)到一個(gè)文件里面不行嗎?!其實(shí)C,這是嚴(yán)格遵守了先聲明后使用的邏輯。所以對(duì)于頭文件引入的混亂的管理可以通過(guò)這個(gè)出發(fā)點(diǎn),達(dá)成一定的一致的。
4、Java與C在庫(kù)函數(shù)方面的區(qū)別
初看之下,覺(jué)得C的庫(kù)函數(shù)能做的,Java也都做了。但是其實(shí)還是有一些細(xì)微的區(qū)分的。
舉一個(gè)例子:sort()函數(shù)
C當(dāng)中對(duì)于vector的排序,是通過(guò)sort(vec.begin,vec.end,compare)來(lái)進(jìn)行的
Java當(dāng)中呢,則是要復(fù)寫(xiě)需要比較類(lèi)的Compare方法的。當(dāng)然Java與C還有其他區(qū)別,這里只是簡(jiǎn)單列舉了4方面,主要是想告訴大家,雖然Java和C很相似,但兩者之間還是存在很多區(qū)別的。對(duì)Java的理解要集中到抽象的定義,把側(cè)重點(diǎn)應(yīng)該放到類(lèi)組織方式,類(lèi)職責(zé)的管理層級(jí)等設(shè)計(jì)問(wèn)題上來(lái),對(duì)C的理解要充分理解C語(yǔ)言,除了上面提到的,也更應(yīng)該注重內(nèi)存問(wèn)題的思考和判斷上。
想要學(xué)習(xí)更多Java知識(shí)歡迎來(lái)千鋒教育,滿(mǎn)滿(mǎn)的Java技術(shù)干貨擁抱你,你給千鋒一個(gè)機(jī)會(huì),千鋒還你一個(gè)高薪未來(lái)。
千鋒教育:
千鋒西安校區(qū):
西安校區(qū)地址:西安市雁塔區(qū)高新六路52號(hào)立人科技C座西區(qū)4樓
面授課程:全棧WEB+培訓(xùn)、全鏈路設(shè)計(jì)培訓(xùn)、PHP全棧+服務(wù)器集群培訓(xùn)、JavaEE+分布式開(kāi)發(fā)培訓(xùn)、大數(shù)據(jù)+人工智能培訓(xùn)、 Unity游戲開(kāi)發(fā)培訓(xùn)、Python培訓(xùn)、云計(jì)算+Python運(yùn)維培訓(xùn)、全棧軟件測(cè)試培訓(xùn)、Android培訓(xùn)、iOS培訓(xùn)