C,C++,JAVA,

C、C++、Java的关系总结一下。

C

既具有高级语言的特点,又具有汇编语言的特点。由美国贝尔研究所的D.M.Ritchie于1972年推出。可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

  1. C是高级语言,它把高级语言的基本结构和语句与低级语言的实用性结合起来。可以像汇编一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
  2. C是结构式语言。结构式语言的显著特点是代码及结构的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数的形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
  3. C语言功能齐全。具有各种各校的数据类型,并引入了指针的概念。
  4. C语言对编写需要硬件进行操作的场合,明显优于其它高级语言。
  5. 缺点:

a)         数据封闭性不好,安全性上有很大缺陷。

b)         语法限制不太严格,对变量的类型结束不太严格,影响程序的安全性,对数组下标越界不作检查等,从应用的角度,C比其它高级语言较难掌握。

C++

         中国大陆的程序员通常读:C加加,西方程序员通常读做:C plus plus, CPP.

C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

  1. C子语言。C++支持C语言的几乎全部功能,主要是c89的部分,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C++标准文献)。
  2. 面向对象的C++语言。C++语言原本不具备面向对象的设计功能,然而随着面向对象编程的概念的提出以及如Java等语言的发展成熟,C++语言也开发出了支持面向对象功能的版本。
  3. 泛型编程语言。C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。
  4. STL(C++标准模板库,Standard Template Library)。随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的native代码低些,但是其安全性与规范性使它大受欢迎。
  5. C++在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C++的集成开发环境中完成的。C++相对众多的面向对象的语言,具有相当高的性能。   C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。
  6. 缺点:C++由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是C++的编译系统受到C++的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。
  7. 人们一般认为,使用Java或C#的开发成本比C++低。但是,如果能够充分分析C++和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:软件规模和复杂度都比较小。如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C++的优势将会越来越明显。造成这种差别的就是C++的软件工程性。  

 

JavaC++:

Java和C++都是面向对象语言,都能实现面向对象思想(封闭、继承、多态)。由于C++为了照顾大量C使用者,而兼容了C,使得自身仅仅成为了带类的C语言,影响了其面向对象的彻底性。Java则是完全面向对象的语言。它摒弃了其它语言的不足之处,从根本上解决了C++固有缺陷。

  1. 指针:JAVA语言让编程者无法找到指针来直接访问内存,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如野指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
  2. 多重继承:c++支持多重继承,这是c++的一个特征,它允许多个父类派生一个子类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends + implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。
  3. 数据类型及类 Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。
  4. 自动内存管理 Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:

Read r=new Read(); r.work();

语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。C++中必须由程序员释放内存资源,增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。

  1. 操作符重载 :Java不支持操作符重载。操作符重载被认为是C++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。
  2. 预处理功能 :Java不支持预处理功能。c/C++在编译过程中都有一个预编译阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加丁编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与C++预处理器的功能类似。
  3. 异常:JAVA中的异常机制用于捕获例外事件,增强系统容错能力。
7.  Java不支持缺省函数参数,而C++支持。在c中,代码组织在函数中,函数可以访问程序的全局变量。C++增加了类,提供了类算法,该算法是与类相连的函数,C++类方法与Java类方法十分相似,然而,由于C++仍然支持c,所以不能阻止C++开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。 Java没有函数,作为一个比C++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
8.  字符串 :c/C++不支持字符串变量,在c和C++程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(String和StringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
a)   在整个系统中建立字符串和访问字符串元素的方法是一致的;
b)   字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
c)   Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
d)   可对字符串用“十”进行连接操作。
9.  “goto语句”:“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句用于无条件转移子程序和多结构分支技术。Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
10.类型转换:在c和C++中有时出现数据类型的隐含转换,这就涉及了自动强制类转换问题。例如,在C++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换

try {

//可能产生例外的代码

} catch (exceptionType name) {

//处理

 }

其中exceptionType表示异常类型。而C++则没有如此方便的安全机制的语言。

  1. C++相对比较复杂、健壮性弱,运行速度快,Java相对比较简单、便利。
  2. 如果从事Web和Internet行业,建议学习JAVA,

如果从事桌面系统开发或是服务开发,linux以及单片机的行业,建议学习C++。

 

 

JavaC:

  1. C是底层的,java是包装的,java能做的C都能做。

C做的东西执行效率高但java比C的开发效率高;

  1. Java和C都是指令式语言(Imperative Language),都是编程语言。不同的是Java是完全面向对象(OO)的语言,而C是完全面向过程的,C的高级版本C++、C#支持面向对象。
  2. c和java都是可以跨平台的, c基于编译技术, java基于虚拟机, 两个语言跨平台的机制不同
  3. Java跨平台,既不同的操作系统都可以通过JVM(java虚拟机)来解释Java程序,而C、C++、C#则是与平台相关的,有些指令只在某些操作系统中才能执行。具体原因是,Java是解释型语言,所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行;而C是编译式语言,代码要先通过编译器转换成与系统相关的中间代码,然后才能运行。
  4. Java不支持系统调用,既无法与操作系统进行交互,这是由它跨平台的特点决定的,而C则可以调用系统中的指令,如fork()。这也就是为什么Java中只有线程(Thread)概念而没有进程(Process)概念,而C两者均有。
  5. Java无法对内存进行控制,而C则可以通过指针对内存进行人为分配。还有一点,Java有Garbage Collection机制,可以自动回收不再使用的空间,而C则要用free()函数释放空间。

转载于:https://my.oschina.net/u/3611296/blog/1570084

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值