Java與C語言的區別——含面向對象介紹


  很多初學編程的小伙伴或者想要學習編程的小白弄不清C語言和Java的區別。本文就針對萌新們盡量用通俗的語言來介紹一下我所理解的編程語言界的兩大巨頭。

  為什么說是兩巨頭,介紹之前我們先看一下某度搜索出來的近幾年編程語言排行榜

            2018~2019年編程語言排行榜前二十  

 


 

            2016~2017年編程語言排行榜前二十

當然Python和C++等語言也是穩居前幾名,我們今天主要說C和Java。好吧是我對Python和C++了解的太少。下面直接略掉起源發展什么的進入正題,想了解的小伙伴可以在看完本篇文章之后直接去某度搜索C語言或Java:

  一:面向過程(C語言)和面向對象(Java):(吃狗屎和狗吃屎)

  簡單來說面向過程就是給要解決的問題分成幾個步驟然后從第一步開始干就完了!它側重於解決問題的過程,舉個不太恰當的例子就是吃狗屎。

而相對於面向過程而言,面向對象是一種思維方式。面向對象就是把構成問題的事務分解成很多個對象,建立對象的任務不是為了完成一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。

 

   我知道你可能已經暈了。現在你可以簡單的理解為相對於面向過程的吃狗屎來舉例子,面向對象就是狗吃屎。狗就是一個對象,吃屎的方法就是對象的一個行為。有一句話叫萬物皆對象,就是說在面向對象中,任何東西都是對象。對象又包含了屬性和方法,再舉一個例子:前段時間網上挺火的奧里給那誰,把他看作一個對象(注意此對象不是你女朋友那個對象的對象),他的名字、身高、體重、發型等特征就是屬性,那個干就完了,奧里給!就是一個方法;總結起來就是對象包含屬性和方法。他除了可以奧里給這個行為能不能干別的,當然能。

  面向過程中的吃狗屎他就是一個過程,而面向對象的狗吃屎就是對象調用方法,當然除了調用吃屎的方法還可以調用別的方法,給他放在門口還能看家。對於萌新關於面向對象可以先了解到這里,或者你已經感覺暈暈乎乎的,沒關系,等到后面的學習和積累了解會更加深入更加清晰。關於面向對象和面向過程網上有一個寫的很好的例子來分享給大家

用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什么菜,你就澆上什么菜。我覺得這個比喻還是比較貼切的。
蛋炒飯制作的細節,我不太清楚,因為我沒當過廚師,也不會做飯,但最后的一道工序肯定是把米飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。
蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那么唯一的辦法就是全部倒掉,重新做一份青菜炒飯了。蓋澆飯就沒這么多麻煩,你只需要把上面的蓋菜撥掉,更換一份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那么香。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否則只能說是各有所長。如果大家都不是美食家,沒那么多講究,那么從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。
蓋澆飯的好處就是”菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是”可維護性“比較好,”飯” 和”菜”的耦合度比較低。蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難,耦合度很高,以至於”可維護性”比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。
   

  二:跨平台

  我認為直接說C語言不能跨平台或者說C語言能跨平台都是不太合適的;C語言的跨平台是源碼級的跨平台,什么意思呢?就是說你用C語言寫的代碼如果是在windows操作系統下編譯出來的可執行程序,這個可執行程序不僅可以在你的windows電腦上運行,拿到別人的電腦上,只要是windows操作系統也可以運行;拿着你用C語言寫的代碼放到linux操作系統上編譯出可執行程序,那這個可執行程序在別人的linux操作系統上也可以運行。總結起來說就是:一次編寫,到處編譯。在這方面Java就比較牛逼了。Java是跨平台的,你寫好的Java代碼在你的電腦上編譯之后,不管是放到windows操作系統上,還是unix或者linux操作系統上都可以運行,只要系統上有Java虛擬機(JVM)都可以運行,總結起來就是:一次編譯,到處運行

  三:效率

  說到執行效率由於沒有寫C語言與Java的起源及發展歷程,這里順帶提一句Java語言是在C語言的基礎上開發出來的,Java的很多底層源碼都是C語言實現的。這一句話現在搞不懂沒關系,只需要知道C語言可以看作是Java的老祖宗。C語言有一個很強大的東西叫指針,當然也是一個難點。指針是直接和計算機內存打交道的東西,這使得C語言的執行效率很高,通過指針你幾乎可以訪問操作計算機的所有內存資源,當然如果使用不當是很危險的。那Java沒有指針嗎?也不能這么說,Java有一個東西叫虛擬機(JVM)它就像一個中介一樣,Java代碼都需要交給它,然后它來和計算機的內存打交道,這當然使得Java的效率沒有C語言高,那Java的指針在哪兒呢?虛擬機的內部最終還是使用的指針,也就是說在Java中使用指針這個過程Java虛擬機幫你實現了,它可以防止一些非法操作,雖然降低了效率但是有利於程序的安全。

  四:應用領域

  C語言主要用於操作系統、內核開發,嵌入式(單片機)、交換機、路由器等網絡設備的開發;java主要是企業應用開發,包括服務器端開發、大數據技術、網站領域等。

 

  當然C語言和Java還有很多異同;像數據類型、內存管理什么的,這些在后續學到了自然就了解了。可能有很多小伙伴會糾結編程入門是先學C語言好還是先學Java好。首先語言沒有好壞之分,其次C語言和Java的基礎知識有很多相似甚至可以說本質一樣,不管先學哪一個基礎知識掌握的差不多了再學另一個會比較簡單。可以根據自己學校的課程安排或者隨大流先學習C語言,畢竟C語言更加底層。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM