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语言更加底层。

 

posted @ 2020-03-22 12:31  小朋友不说话  阅读(1913)  评论(3编辑  收藏  举报