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语言更加底层。
Java与C语言的区别——含面向对象介绍的更多相关文章
- JAVA和C语言的区别
java语言和c语言的区别: 1 un 公司推出的Java 是面向对象程序设计语言,其适用于Internet 应用的开发,称为 ...
- 尽管以C++为基础,但 Java 是一种更纯粹的面向对象程序设计语言
“尽管以C++为基础,但 Java 是一种更纯粹的面向对象程序设计语言”. 无论C++还是Java 都属于杂合语言.但在 Java 中,设计者觉得这种杂合并不象在 C++里那么重要.杂合语言 允许采用 ...
- C、C++、Java、go的语法区别
详细C++.Java比较:http://www.cnblogs.com/stephen-liu74/archive/2011/07/27/2118660.html 一.C.C++的区别 在很大程度上, ...
- 【转】java int与integer的区别
java int与integer的区别 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1 ...
- Java进阶(三十五)java int与integer的区别
Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...
- java.c++.c#.c的区别
C++则一般看作是对C语言的扩展. Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C. C#是微软开发的一种编程语言,语法类似Java,几乎就是从Jav ...
- JAVA之接口与抽象类区别
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- Java抽象类和接口的区别(好长时间没看这种文章了)
Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...
- (转)Java进阶java int与Integer的区别
Java进阶java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象,用一个引 ...
随机推荐
- 机器学习入门 - 逻辑(Logistic)回归(5)
原文地址:http://www.bugingcode.com/machine_learning/ex7.html 把所有的问题都转换为程序问题,可以通过程序来就问题进行求解了. 这里的模拟问题来之于C ...
- JavaScript学习之内存
初学JavaScript时,看红皮书了解了JS基本类型和引用类型在内存中的位置,结果看了简书里的一篇文章,发现对这块的了解还是有些缺陷. 基本类型 JavaScript中的基本类型有五种:Undefi ...
- 一道二叉树题的n步优化——LeetCode98validate binary search tree(草稿)
树的题目,往往可以用到三种遍历.以及递归,因为其结构上天然地可以往深处递归,且判断条件也往往不复杂(左右子树都是空的). LeetCode 98题讲的是,判断一棵树是不是二叉搜索树. 题目中给的是标准 ...
- Python学习笔记--gevent嵌套使用
这篇主要是接着上篇的,实验gevent嵌套使用,看情况如何.还是先上代码. #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2020-0 ...
- 微信h5页面调用第三方位置导航
微信h5页面拉起第三方导航应用 需要准备的: 通过微信认证的公众号有备案过的域名 背景:微信公众号点击菜单栏跳到h5页面,需要用到导航功能 需求:当用户点击导航按钮时,跳转到第三方app进行导航 参考 ...
- JZOJ 1774. 合并果子 (Standard IO)
1774. 合并果子 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 在一个果园里,多多已经将所有的果子打 ...
- 开放融合易用@门户移动开发新体验-逐浪CMS v8.0.1全面发布
北京时间2019年8月30日消息: 领先的web内核研发厂商--上海Zoomla!逐浪CMS团队发布最新CMS版本:Zoomla!逐浪CMS v8.0.1,这是继上个版本v8.0后功能最具完强大与精彩 ...
- Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置
Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...
- LSP原则—关于正方形不是长方形
长方形有二个属性长和宽.并有一个设置长的方法和设置宽的方法,还有一个求面积的方法. 像下面 private int length; private int width; public void set ...
- 处理asp.net core连接mysql的一个异常Sequence contains more than one matching element
晚上在那里调程序,把mysql.data组件的nuget包进行了更新,前几天好好的程序,开始抛错,跟踪断点发现以下的异常: Unable to connect to any of the specif ...