事业部介绍 实训体系 实训基地 实训联盟 成功案例 岗位需求 联系我们


Java与C++的区别和联系

C++与Java的区别大致分为三类:
Java不支持的C++特性
Java的独特之处
C++和Java都有但是不相同的特性

1、Java摈弃的C++的内容
    有相当一部分C++的特性Java不再支持。在某些情况下,一个特殊的C++特性和Java的运行环境不想关。另一情况下,Java的设计者摈弃了C++中某些重复的内容。还有就是出于对网络应用运行安全的考虑,Java不再支持某些C++的特点。
    Java与C++之间最大的不同就是Java不再支持指针,指针是使C++语言成为世界上功能最强大语言的主要原因。但是对于指针的使用有着一定程序的危险。
    Java不支持指针出于以下两个原因:
    (1)指针本身就不安全。如,使用C++的状态指针,可以访问程序代码和数据段外的内存地址。一个恶意程序可以利用这个特点破坏系统,完成一次或多次非法的访问(获取你的密码)或是违反安全限制。
    (2)即使指针可以被限制在Java的运行系统中(理论上),但是设计者仍然认为它的使用是麻烦的Java中不存在指针,所以也没有->操作符

细举Java中的“省略”内容:
(1)Java不再包含结构或者联合。在可以完全包含它们的类出现之后,这些结构就是多余的
(2)Java不再支持操作符重载。操作符的重载在某些情况下造成类C++程序的含糊不清,它带来的麻烦要远远大于它带来的好处
(3)Java中不再包括预处理,也不再支持预处理命令。预处理在C++语言中已经不如在C中那么重要,Java中就彻底弃用了它
(4)Java不支持自动的类型转换,因为这种类型转换会导致精度的降低。在Java中,如果要将长整型转换为整型的时候,必须显式强制执行类型转换。
(5)在Java中的代码必须封装在一个或多个类中,所以Java中不再包括所谓全局变量或是全局函数的概念。
(6)Java中不再允许默认的参数,在C++中,当过程调用时存在没有对应值的参数的时候可以使用一个预先指定的值,Java中不允许这样的做法。
(7)Java不支持多重继承,不允许一个子类继承多个父类
(8)Java支持构造函数,但不支持析构函数,Java增加了finalize()函数。
(9)Java不支持typedef.
(10)Java中不能声明一个无符号的整数。
(11)Java不再支持goto语句
(12)Java没有delete操作符
(13)Java中的《and》不再重载I/O操作
(14)Java中,对象只能由引用传递,C++中对象可由值或引用传递。

Java的新特性:
Java的许多特点是C++没有的,比如多线程,包和接口,还有其它许多独特多之处。
(1)多线程允许两个或者多个相同的线程并发运行。这是一种由语言级支持的并发机制。而C++中并没有这样的机制。如果要并发执行一个C++的程序,必须利用操作系统的功能手工启动,虽然这样也可以执行两个或多个线程,但是很麻烦。
(2)C++中没有可以和Java包对应的特性。相对接近的就是用一个公用头文件的一组库函数。而C++中构建和使用函数库与在Java中构建包和使用包是完全不同的方法。
(3)Java的接口与C++中的抽象类很像(C++中的抽象类定义为包括至少一个纯虚函数的类)。相同之处就是,Java中的接口与C++中的抽象类不能创建一个实例,两都都用于指定一个子类实现的一致的接口。两者之间最大的区别就在于接口对于这样的功能的实现更为清楚。
(4)Java提供一个流线型的内存分配机制,与C++相同,Java支持new关键字,但不支持delete关键字。当一个对象的最后一个引用撤销的时候,对象本身被自动的删除,并进行内存垃圾回收。
(5)Java丢弃了C++的标准库,将它替换成自己的API集合类,它们在功能上是相似的,但名字和参数有着明显的不同。同时,因为所有的Java API库都是面向对象的,而C++的标准库中只有一部分是,所以例程调用的方式不同
(6)Java增加了break和continue语句以接收标记
(7)Java中的char类型是16位的unicode字符。与C++中的wchar_t类型想似,使用时unicode字符增加了代码的可移植性。
(8)Java增加了>>>操作,完成无符号的右移
(9)除支持单行和多行的注释之外,Java增加了第三种注释方法:文档注释。文档注释以/**开头,以*/结尾。
(10)Java包含一个内置的字符串类型叫做String,String在某种程序上和C++提供的标准string类型相像。当然C++中的String只有在程序中声明后才可以使用,它并不是内置的类型。

Java与C++的不同特性:
介绍的是Java与C++的共同特性,但是两种语言在处理上有所不同:
(1)Java和C+都支持布尔类型的数据,但是Java实现true和false的方式和C++不同。在C++中,true是非零值,false是零值。在Java中,true和false都是预先定义好的常量,而且是一个布尔表达式能得到的惟一的两个值。虽然C++也定义了true和false,并指定为布尔变量,但C++自动将非零值转换为true,零值转换为false。Java中是不会出现的。
(2)在创建C++的类的时候,访问说明符应用到一组声明中。在Java中,访问说明符仅应用于其限定的声明中。
(3)C++支持异常的处理,这与Java类似,但是在C++中无需捕捉一个被引发的异常。