C++与Java的区别

来源:互联网 发布:知乎spam 编辑:程序博客网 时间:2024/03/29 14:17

  Java与C++都是当前比较流行的面向对象编程语言,它们都具有面向对象的三大特性——继承,封装,多态。从总体上来讲,C++兼容了C,在C语言的基础上加上了面向对象的,所以C++同时具有面向过程和面向对象的特点。而Java是一种完全面向对象的语言,它借鉴了C/C++的许多成功经验,但也摒弃了C++的许多难点与“不足”,因此它显得更为简单易学。下面主要谈谈它们之间的区别:

 

1.Java编译成字节码,然后通过Java虚拟机(JVM)解释执行,这使得Java具有更强的跨平台性,同时也降低了执行效率。而C++直接编译成可执行文件(.exe),因此C++从速度上来讲要优于Java,但跨平台性低于Java。

 

2.指针。指针是C++里面的精华,也是难点。Java则放弃了指针,但增加了内存回收机制(gc),从而有效避免了C++中由于指针使用不当而带来的麻烦,提高了代码的安全性。

 

3.多重继承。C++允许多重继承,但是Java只能继承一个类,但是可以实现多个接口。

 

4.C++支持运算符的重载,Java则不允许。

 

5.内存管理。Java提供自动内存管理机制。Java程序中所有的对象都是通过new操作符建立在内存堆栈上,这与C++中的new基本一致。但Java自动进行无用内存的回收(垃圾回收机制)。而在C++中需要程序员进行内存资源的释放,增加了程序设计的工作量。Java的这种gc机制是通过多线程来实现的,利用空闲时间来工作。

 

6.Java中取消了C++中结构体和联合的概念。

 

7.Java不支持预处理功能。C/C++在编译过程中都有一个预处理阶段,预处理阶段为开发人员提供了方便,但是增加了编译的复杂性。当然,Java中的引入语句(import)和这种预处理过程有点类似。

 

8.虚函数。在C++中,虚函数是在类中被声明为virtual的成员函数,当编译器遇到通过指针或引用此函数时,对其执行晚绑定,即通过指针或引用指向的类型信息来决定该函数是哪一个类的,通常此类指针或引用都声明类基类的,它可以指向基类或者派生类的对象。多态是指同一个方法根据其属性不同对象可以有不同的操作。而在Java中所有的函数都默认为虚函数,其自动实现了虚函数的机制。

 

9.异常处理机制。Java提供了try{}catch(){}finally{}结构类捕获异常,增强系统的容错能力,而在C++中没有如此方便的机制。

 

10.Java是一种纯粹的面向对象语言,而C++还保留了C语言结构化编程思想。

 

    总之,Java衍生于C++,他们在语法上有许多相似之处,但Java在继承C++优点的同时也删除了许多的“难点”。

 

参考资料:Java与C++的比较 熊伟《理论研究》

原创粉丝点击