很多初学编程的小伙伴或者想要学习编程的小白弄不清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语言更加底层。

Java与C语言的区别——含面向对象介绍的更多相关文章

  1. JAVA和C语言的区别

    java语言和c语言的区别:                                      1 un 公司推出的Java 是面向对象程序设计语言,其适用于Internet 应用的开发,称为 ...

  2. 尽管以C++为基础,但 Java 是一种更纯粹的面向对象程序设计语言

    “尽管以C++为基础,但 Java 是一种更纯粹的面向对象程序设计语言”. 无论C++还是Java 都属于杂合语言.但在 Java 中,设计者觉得这种杂合并不象在 C++里那么重要.杂合语言 允许采用 ...

  3. C、C++、Java、go的语法区别

    详细C++.Java比较:http://www.cnblogs.com/stephen-liu74/archive/2011/07/27/2118660.html 一.C.C++的区别 在很大程度上, ...

  4. 【转】java int与integer的区别

    java int与integer的区别 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1 ...

  5. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  6. java.c++.c#.c的区别

    C++则一般看作是对C语言的扩展. Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C. C#是微软开发的一种编程语言,语法类似Java,几乎就是从Jav ...

  7. JAVA之接口与抽象类区别

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  8. Java抽象类和接口的区别(好长时间没看这种文章了)

    Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...

  9. (转)Java进阶java int与Integer的区别

    Java进阶java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象,用一个引 ...

随机推荐

  1. Eclipse快速入门:远程调试Java应用

    Eclipse快速入门:远程调试Java应用 2012年03月27日00:00 it168网站原创 作者:皮丽华 编辑:皮丽华 我要评论(0) 标签: Eclipse , Java , Java框架, ...

  2. API网关Kong

    官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...

  3. Redis:slave flush old data造成实例不可用

    一.问题描述 2019-02-22凌晨02:42分前后,收到集群中 [10.32.52.8:6500] 实例不可用告警,登陆管理界面查看此实例在正常运行状态,期间未出现机器宕机或实例直接挂掉的现象. ...

  4. 模拟HTTP请求超时时间设置

    HTTP请求有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间(请求资源超时时间). 使用curl命令行 连接超时时间用 --connect-timeout 参数来指定 数据传输的最大 ...

  5. 在虚拟机单机部署OpenStack Grizzly

    安装过程 安装Ubuntu 我手头有的是Ubuntu Server 12.04 64位版,就直接用了,默认安装即可,配置的时候很简单,如下 内存:1G 硬盘:20G 处理器:2 网络:NAT 装好以后 ...

  6. 7-35 jmu-python-求三角形面积及周长 (10 分)

    输入的三角形的三条边a.b.c,计算并输出面积和周长.假设输入三角形三边是合法整形数据. 三角形面积计算公式:  ,其中s=(a+b+c)/2. import math #导入math库 math.s ...

  7. Dubbo中@Service工作过程解析

    Dubbo中@Service工作过程解析 Spring中的BeanPostProcessor 首先我们应当了解到在spring体系中BeanPostProcessor是什么.加载流程 它是什么 Bea ...

  8. Vue双向绑定的实现原理系列(三):监听器Observer和订阅者Watcher

    监听器Observer和订阅者Watcher 实现简单版Vue的过程,主要实现{{}}.v-model和事件指令的功能 主要分为三个部分 github源码 1.数据监听器Observer,能够对数据对 ...

  9. python3 flask shell

    python shell来操作flask flask shell 报错: from flask_bootstrap import BootstrapImportError: No module nam ...

  10. python实验一

    安徽工程大学 Python程序设计实验报告 班级物流管理191 姓名彭艺    学号3190505139成绩          日期  2020年3月3日     指导老师    修宇 实验名称    ...