站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题Java语言和C++语言的差异

Java语言和C++语言的差异

摘要: Java语言和C++语言的差异

   Java采用了C及C++的语法格式,对于学习过C及C++的程序设计者来说,学习
Java将有可能很轻松。但是,如果仔细检查Java语言的许多细节,就会发现Java取
消了不少C及C++的特性,并且加入了一些新的特性。这些差异包括:
   o 不再有指针(Pointer)的概念。
  这是Java和C/C++在语法上的主要区别之一。在C及C++中,指针的灵活运用将会
给程序设计带来极大的便利,但是其灵活性也成为了导致程序不稳定的一个主要因
素。配合C及C++的内存管理策略,编程人员必须亲自跟踪自己向系统申请到的内存
,最后确认交还给系统。并且在使用指针时,要随时注意是否超过合法的内存空间
,造成Segmentation Fault或General Protection Fault这样的问题。
   Java提供了一种引用(Reference)类型用来替代指针,通过引用去访问申请
到的内存空间,可以确保不会访问不属于自己的内存空间,同时,程序的执行系统
也可以动态地做内存垃圾回收工作,将那些被取消引用的内存空间回收给系统使用
。这种动态内存分配机制,通过牺牲一定的灵活性,保证了内存分配一定程度上的安全性。
   o 不再有函数(Function)的概念。
   Java编程语言中,取消了结构化语言中最重要的部分--函数。在面向对象程序
设计的概念里,对象的数据才是真正的主题,而处理对象数据的方法则必须依附在
对象内才有意义。因此函数概念完全是不必要的。这强化了面向对象的开发策略。
   o 不再使用structure、union和typedef。
  事实上,在C++中就可以去掉C中的structure和union等对复杂数据的自定义结
构类型了,因为类(Class)的定义方式完全可以做到这项功能。而typedef的功能
也可以由类来实现。虽然C++这样的设计是为了和C兼容,但是这些毕竟是多余的语
言特点,在Java语言中便被抛弃了。
   o 不再有类的多重继承(Multiple Inheritance)。
  在C++中,多重继承是一项很强的功能,但也是较难掌握的。取消多重继承降低
了Java语言的功能,但它使Java看起来更为简洁。同时,Java也提供了接口
(Interface)的方式,可以实现部分多重继承的作用。和多重继承的不同之处在于
接口并不会定义类方法的内容,以及类中的数据。
   o 不再有操作符重载(Operator Overloading)。
  操作符重载被看作是C++的一个特色。在C++中,利用操作符重载,程序设计者
通过对现有运算符赋予自己的定义,可以使程序看起来更为自然。但是,如果使用
不当,也会使整个程序的可读性大受影响。同时,这一功能的存在也并非必要,程
序设计者可以定义类中的方法来达到同样的目的。
   o 取消了自动类型转换。
   Java是一种强类型检查的编程语言,对于诸如浮点型变量赋值给整型变量这样
的情况而言,在C++的语法中是允许的,最多只是在编译时给出警告信息。但是,在
Java中,除非写明强制类型转换,否则编译无法通过。
   o 不再有预处理器(preprocessor)功能。
  利用C/C++中提供的#define、#include等预处理指令,厉害的程序设计人员可
以自己开发一套只有自己才看得懂的宏指令集。从软件工程的角度上看,这对团队
开发软件和整个软件的维护都是十分不利的。同时,预编译后的程序代码和程序设
计者看到的程序代码是不同的。如果宏指令集有错,编译器产生的错误信息将不会
是编程人员所预期的,这增加了程序调试的难度。
   o 取消了goto语句。
  在C++中,goto语句已经不被建议使用了,保留goto只是为了和C语法兼容。在
Java中goto语句被完全抛弃了,与此同时,Java又扩大了break语句和continue语句
的功能,通过使用break和continue,程序流程被允许在多层循环中跳转。
  可以这样说,Java编程语言是一种简洁而有效的纯面向对象的编程语言。而C++
语言因为要与C兼容(C++语言是作为C语言的一个超集被定义的),所以在面向对象
的特性方面不如Java好。
↑返回目录
前一篇: Java中文识别问题完全解决办法
后一篇: Java语言TSP递归程序的优化