Java和C++:同父异母的兄弟?
Java和C++ 的相似性大于区别,但是Java的推崇者感觉到:相比而言,Java更容易学会,其编写程序的环境更容易设置。两种语言的完整的对比超出了本文的范围,如下是一些比较重要的区别:
- C++支持多重继承;Java则不支持该功能。Java允许一个类从多个接口中继承,后者类似于C++中的抽象类。根据Java的设计者的看法,基于接口的继承结合了C++中的多重继承的长处,同时又避免了C++中因多重继承而产生的一些缺陷。
- 在Java中,所有的函数和变量必须是类中的一部分。相反,C++ 允许函数和变量象C语言那样在全局定义。
- 在Java程序中的所有对象都是用new操作符在堆上创建的,而不是在栈中创建。Java也具有垃圾搜集功能,所以它不必对遇到的每个new 再进行delete操作,而这恰好是C++程序中常会出现的内存漏洞的起因。事实上,Java中没有delete操作符。
- Java既不支持模板,也不支持操作符重载。
- Java没有预处理程序,因此不支持预处理器宏。这就免除了产生模糊代码的缺陷,在C和C++程序中,一旦过分依赖#define 宏时,程序就会出现问题。
- Java中没有指针。New操作符返回的是一个对象的引用,这同C++中的引用类似。Java消除了指针,可以免除因滥用指针而出现的访问不属于该程序的内存区域的问题。
- Java 不支持缺省的函数参数,而C++却支持。
- Java包含一个线程类,使得语言具有多线程编程的能力。两个或者多个线程在同一时间内访问同一对象时,Java提供了同步化的高级机制。而在C++中,只有在调用嵌入在操作系统中的线程函数,才可以编写出多线程的程序。