C++与Java语言及其开发工具(二)

2014-11-23 22:22:07 · 作者: · 浏览: 1
a还取消了C++中的GOTO语句、操作符重载、自动类型转换及指针数据类
型。 GOTO语句引起的争议已经有很多年了,可一直阴魂不散,这跟某些程序员对该
语句一直情有独钟有关。C++仍然支持数据类型的自动转换,但Java要求编程人员
显式实现数据类型之间的转换。自动数据类型转换使得两个数据类型互不兼容的
变量可以相互赋值,而不需要给出显式说明。这有时会导致一些问题,其中最常见
的是精确度损失。比方说,如果把一个带符号的32位整数赋给一个无符号整数,则
所有的结果均为正数。Java的设计者们认为这很容易引起程序错误,从而决定不支
持这种转换方式。

某些C和C++程序员也许会觉得遗憾,因为Java不再支持他们非常愿意使用的指针类
型。但我们都知道,指针是调试程序时使人最感头痛的地方之一。Java的设计者们
认为,由于Ja va取消结构类型并且把数组封装到了对象里面,指针已经不再有用武
之地。但有些C和C++高级编程人员可能仍然需要一段时间才能走出指针的阴影。
因为指针的用法尽管很难掌握,可一旦掌握了其使用技巧,就会让人感到它的功能
的确非常强大。作为一种面向分布式计算环境的编程语言,Java放弃对指针的支持
是非常顺理成章的,因为只有这样,才可能产生一种稳可能产生一种稳定、高效而
且安全的代码。

3. 内存管理和线索

Java语言带来的好处还在于其自动内存管理和线索控制。在C和C++中,内存必须用
free、 malloc和其它许多内存管理标准库管理。因此,系统要了解何时分配、释
放内存并且跟踪所有的内存使用情况是非常困难的。如果要在C和C++中实现线索
功能,必须使用一个可对线索进行各种控制的类库。而在Java中,尽管线索仍然需
要类的支持,但系统却在语言级包括了线索同步机制。

Java具有内嵌的内存管理程序。一旦创建了一个对象,Java的运行系统就开始跟踪
这个对象,直到不再需要跟踪该对象的所有引用为止。当某个对象不存在相应的引
用时,Java把这个对象放到一个用于垃圾搜集的栈内。为在性能损失最小的情况下
提供自动垃圾搜集机制,这个垃圾搜集程序将在后台或作为低优先级线索运行。这
样,Java的垃圾搜集软件将在前台线索的执行期间抽空执行,或者在系统显式提出
需要使用那些被已经死亡的类所占用的内存空间时执行。

从后台内存管理程序可以很明显地看出,多线索的确可以增强Java环境的相对性能。
鉴于多线索的重要性,Java在语言级提供了线索同步机制,使多线索成为一种内嵌
特性。Java 语言支持针对方法的同步修饰符,并通过该修饰