Java与C++的区别

    JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,从而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,摒弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。

一、Java和C++的基本区别


1. JAVA不支持的C++特性

    JAVA不再支持指针。指针使C++语言成为功能最强大最重要的一种编程语言。但同时指针在使用不正确的情况下也是C++中最危险的部分。
注意:既然JAVA中不存在指针,那么也不存在->操作符。这里还有一些非常重要的”省略”:
a) JAVA不再支持操作符重载
b) JAVA不再包含结构或者联合。
c) JAVA不再包括预处理,也不再支持预处理指令。
d) JAVA不支持自动的类型转换。因为这种类型转换导致精度降低例如当从长整型转换为整型时,必须显示强制执行类型转换。
e) 在JAVA中的代码必须封装在一个或者多个类中。因此JAVA中不再包含所谓的全局变量或者全局函数。
f) JAVA不再允许默认参数。
g) JAVA不支持多继承,即不允许一个子类继承多个父类。
h) 虽然JAVA支持构造函数,但是不再支持析构函数。但是,JAVA增加了finalize( )函数。
i) JAVA不再支持typedef.   
j) 在JAVA中不再可能声明无符号整数。  
k) JAVA不再支持goto语句。  
l) JAVA不再有delete操作符。  
m) JAVA中的<>不再重载I/O操作。  
n) JAVA中,对象只能由引用传递,C++中对象可由值或引用传递.


2. JAVA的独特之处。 

    JAVA中的许多特性是C++中没有的。其中最重要的三个方面是多线程、包和接口,还有其他的许多独特之处都丰富了JAVA编程环境。
1) 多线程允许两个或者多个相同的线程并发运行。
而且,这是一种在语言级支持的并发机制。C++中没有类似的机制,或者说C++采用的是单线程的体系结构。
2) C++中没有可以与JAVA包对应的特性。
3) JAVA的接口与C++的抽象类相似(C++中的抽象类是包括至少一个纯虚函数的类)。
4) JAVA提供一个流线型的内存分配机制。与C++类似,JAVA支持new这个关键字。但是,不支持delete关键字。当对象的最后一个引用撤销时,对象本身被自动地删除,并进行内存垃圾回收。  
5) JAVA丢弃了C++的标准库,将它替换成自己的API类集合。它们功能上有相似之处,但是名字和参数有显著的不同。同时,因为所有的JAVA API库都是面向对象的,而C++库只有部分是,所以库例程调用的方式不同。
6) JAVA增强了break和continue语句以接收标记。
7) JAVA增加了>>>操作,完成无符号的右移。
8) 除支持单行和多行的注释之外,JAVA增加了第三种注释方法:文档注释。文档注释以结尾。
9) JAVA包含一个内置的字符串类型叫做String。String在某种程度上和C++提供的标准string类很相似。当然C++中的string只有在程序中声明后方可使用,它并不是内置的类型
   

3. C++和JAVA都有但是却不相同的特性。

1) JAVA和C++都支持布尔类型的数据,但是JAVA实现true和false的方式和C++不同。在C++中,true是非零值,false是零。在JAVA中,true and false都是预先定义好的常量,并且是一个布尔表达式能得到的唯一的两个值。
2) 在创建C++类时,访问说明符应用到一组声明中。而JAVA中,访问说明符仅应用于其限定的声明中。

3) C++支持异常处理,这与JAVA类似,但是在C++中无需捕捉一个被引发的异常。


二. JAVA和C++的区别详细介绍


    (1) JAVA的运行速度(JAVA最大的障碍在于速度)
解释过的Java要比C的执行速度慢上约20倍。无论什么都不能阻止Java语言进行编译。
    (2) JAVA所有东西都必须置入一个类.
    Java是完全面向对象的语言,它不再支持C++程序时所使用的过程式的设计方法,所有函数和变量部必须是类的一部分。除了基本数据类型(例如整型、字符型、布尔型等)之外,其他的数据对Java来说都是对象,包括数组。
    Java不存在全局函数或者全局数据。如果想获得与全局函数等价的功能,可考虑将static方法和static数据置入一个类里。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合、枚举这一类的东西,一切只有“类”(Class),消除了不必要的麻烦。java采用了纯面向对象技术,即使是主函数public static void main(String[] args){}也要放在主类中,可以看出和C++的明显区别。
    (3) 在Java中,类定义采取几乎和C++同样的形式。
    但没有标志结束的分号。没有类声明,只有类定义。
    (4) Java中没有作用域范围运算符“::”
    c/c十十在编译过程中都有一个预编译阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c十十预处理器(#include)的功能类似。(注意:只是类似而已)
    (5) JAVA中没有预处理功能的详细介绍 
    使用预处理程序虽然可以很方便地达到许多功能,但是站在软件工程的角度上看,对整个软件的维护其实是很不利的。由于C++语言中预处理程序的功能太过强大,厉害的程序设计高手常会自行开发一套只有自己看的懂的宏语言,一旦整个软件要交给其他人去维护,后继者很难在短时间内了解前一个人所写下的宏功能,增加软件开发时团队工作及日后维护的困难度。 
    (6) 与C++类似,Java含有一系列“主类型”(Primitive type),以实现更有效率的访问   
    在Java中,这些类型包括boolean,char,byte,short,int,long,float以及double.所有主类型的大小都是固有的,且与具体的机器无关(考虑到移植的问题)。 
    (7) Java静态引用的字串会自动转换成String对象。
    (8) Java增添了三个右移位运算符“>>>”,具有与“逻辑”右移位运算符类似的功用,可在最末尾插入零值。“>>”则会在移位的同时插入符号位(即“算术”移位)。
    (9) 尽管表面上类似,但与C++相比,Java数组采用的是一个颇为不同的结构,并具有独特的行为。就是说Java提供数据下标越界检查,而C++没有提供.
    (10) 对于所有不属于主类型的对象,都只能通过new命令创建

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值