从C++到Java
C++和Java都是面向对象的语言,Java从C++衍生而来,摈弃了C++中复杂或者有缺陷的一些特性,又添加了一些新的特性和机制,力求使这种语言功能强大,夸平台,而又简单易用。有人说,Java是一种VB版的C++,功能强大,又简单易学。如果你用过VB,我想体会会更深一些。本文主要想通过比较Java和C++的不同之处,对那些从C++转到Java的程序员提供一些帮助。如果不了解C++,就到此为止吧。如果你熟悉C++,而又要开始Java项目,那就请继续吧,相信下面的话会对你有帮助。
夸平台
C++是跟平台相关的,就是说windows下写的code,在linux下必须重新编译才能运行。Java是夸平台的,也就是Java声称的“一次编写,到处执行”,也有人说是“一次编写,到处修改”,这也许有夸张的成分,无论如何,通过虚拟机实现跨平台都是Java的一个卖点。
指针
这个你再熟悉不过,使用灵活,功能强大,不过也肯定吃过它的苦头,什么空指针,野指针,都会有问题。在Java中,对程序员来讲,没有指针的概念了,这就省去了不少麻烦,比如:
const int a=2;
const int * pi1=&a;
int * const pi2=&a;
const int *const pi3=&a;
请说说pi1,pi2,pi3的区别吧,是不是好像在哪里面试时遇到过,Java中没有这样的节目了。顺变说一句,const在Java中,也不支持了。
内存管理
C++中,通过运算符new,delete来分配和释放内存。记得要成对使用,否则,多次delete一块内存,行为未定义,未定义就是什么都可能发生,比如系统崩溃。如果new了一块内存,不delete掉,就会有内存泄露。相比C++,Java中要简单的多,只有一个new来分配内存,Java的自动垃圾回收机制会为你做好剩下的事情,听起来可真不错呀。这可是Java的又一大卖点呢。
栈对象
在一个函数的内部,直接通过类名定义的对象,会在栈里创建,如:
Class car{
car();
~car();
…..
}
Void testFunction(){
Car mycar;
}
对象mycar就在栈里创建,在Java中,这样的语法是定义了一个类Car的一个引用,并没有创建任何对想像,Java中,创建对象只能new出来,对象会在堆上创建。C++中返回局部对象的指针或引用的问题就不会再有了。
多继承
用多继承来描画现实世界中,有些事物的关系是必要的,但多继承在实现上回引起一定模糊性(具体可参考相关C++书籍)。为了改善这些,Java中不再支持多继承,它提供了一种替代的方案,我们可以通过单继承,再实现interface来达到同样的目的,像这样:
class myClass extends baseClass implements InterfaceA,InterfaceB{
}
全局变量
在C++中,这个家伙使用方便,但同时又很不安全,毕竟不管在那里,不管谁都可操作它,它也往往成为系统崩溃的罪魁祸首。 Java对此作了限制,Java中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用(public),静态(static)的变量来实现一个全局变量。Java对全局变量进行了更好的封装。
Goto语句
任何一本介绍C++的书,也许都会告诉你,尽量不要使用Goto,因为他会降低程序的可读性,正因为如此,Java中不再支持Goto语句。对于多层循环的跳出,可用代表号的break或者continue,与错误处理相关的,可用Java的错误处理机制的try,catch,finally。
结构和联合
C++中的结构和联合中所有成员均为公有的,这就带来了安全性的问题。Java中不再支持它们了,所有的内容都封装在类中。
宏定义
C++中用宏定义来实现的代码给程序的可读性带来了困难。Java中,不支持宏定义了,它可以通过关键字final来声明一个常量,以实现宏定义中广泛使用的常量定义。
总之,这两种语言有多的相同的地方,但同时也有很多的不同,对于从C++转到Java的程序员,多比较两种编程语言的不同之处,就可以较快的上手。