C++ 与 Java 语言对比
-----
汪保杰
2007-11-11
于长沙湖大
今天一大早来到实验室,突发地想要写点什么!
做
Java
已经几年了,以前也学习过
C++
,但是从来没有真正对比过
Java
和
C++
的具体不同。
现在项目要用
VC
,熟悉中不得不把两者做个比较。
这里只是简单罗列出两者在语言上的不同,
Java
偏应用层,
C++
偏低层,做为一个软件开发着,是应该掌握的,这可是我们计算机专业的看家语言,目前市场上
60%
的人会
Java, 40%
的人会
C++
,这篇文章没有具体的展开。如果某本书是以这种方式写的,即实战型的,对有经验的人来说,会接受很快。
请大家始终记得
OOP
的三大精神
---------
封装,继承,多态。
1
.
Java
是完全封装的,而
C++
的函数是可以定义在
Class
的外部的。从这里就可以看出
C++
的
OO
思想不够彻底,至少在封装这一点上。
2. C++
中有拷贝构造函数,可以把一个对象的属性
copy
到另一个对象里
,
也叫对象赋值,而
Java
是用
Clone
实现的。
3. Java
的世界是
Object
世界(当然除了基本类型,这是
Java
美中不组的一点),对象之间的关系是
Reference
的,象
C++
中的指针,我们叫他句柄。但在
C++
中对象之间是可以直接赋值的!在
Java
中只是句柄和句柄之间的转换!
Java
和
C++
都有
this,
在
C++
中
this
表示指针,而在
Java
我们叫他引用。但在用法上大同小异。
4. C++
中有所谓的析够函数,而
Java
中也有一个类似的东西叫做
finalize, 是 Object 类的一个方法,
但
Java
中有个很好的东东就是自动回收机制。而
C++
中你
new
的东西不
delete
的话是不会自动清理内存的,所以
Java
要省事些啊
!
5
.
C++
的函数有个默认的概念,在
Java
中是没有的。但
JDK1.5
的范型的
String…
参数似乎有点象
, Java
在最初抛弃
C++
一些思想之后,现在似乎也慢慢也入了一些东西!
6. static
关键字
, C++
和
Java
中意思基本相同,
C++
中
static
变量必须在类外初始化。
7. C++
中的对象成员要在本类的构造函数之前构建,而
Java
没有这个规则,
Java
的对象和普通变量一样简单。
8. C++
有个常量修饰符
const,
而
Java
中一个常量一般是用
static + final
等价实现。
9
.可能写
Java
的朋友很不习惯的就是
C++
的每个类都有个分号结尾。
10
.
Java
有个很好的东西叫包,使得全世界的类不会发生冲突。在
C++
也有一个类似的东西叫做作用域运算符
“
::
”
表示。
11
.
Java
在子类的方法重载中要想调用父类的同名方法只要用
Super
关键字,而在
C++
中要用基类名
+
域运算符(
::
)以达到同样的效果。
12. C++
有多重继承,而在
Java
中只是单根继承,但是用
Java
的接口可以达到类似的效果。多重继承有二义性,但可用虚基类(
virtual
)解决该问题。
13. Java
中的多态完全是继承的原因,而
C++
除了继承又引入了虚基类和虚函数(实现了运行时多态性)的概念。
14. C++
中声明了纯虚函数的类为抽象类,而在
Java
中有
abstract
声明的
Method
(当然类也要用
abstract
修饰)
就是抽象类
,
在抽象类方面
Java
原自
C++,
即两者观念上是一致的。
15
.
Java
中的对象全都是
new
出来的,而
C++
不同,当然他也有
new
功能,
Java
中理论上你可以随意
new Object,
他有
gc
这个对象管家,而
C++ new
的
Object
你一定要手动
delete
他。
16
.
C++
中有运算符重载
, Java
里只有
+
号有重载的意思,不过在
JDK5
中也有其他的运算符重载,比如两个类对象可以直接相加。
C++
可以将自定义类型强制转换为基本类型,如将一
Test
类的对象,强制转换为
int
类的对象,要达到这个效果就要用到
operator
关键字,
Java
除了
8
大基本类型以外都是
OO
的,但
Java
也提供了基本类型的对应
Class
类型。
17
.
C++
中有模板的概念
(
类模板,函数模板
)
,在早期的
Java
版本
(1.4
之前
)
,没有模板的概念,但
1.5
引入了范型,与模板的思想类似,这可是好东西。如果你看
Java
原码库,你会发现他变化的好大。
小结
:
1.
学习任何东西,往往在对比中会有更好的收获。
2.
当然
C++
和
Java
还有很多不同,这里就不一一列举,感性趣的朋友可以继续总结。
3.
相比之下你会觉得
Java
的世界更美好。但要学好
Java
你没有理由不去学
C++
。
本博客为学习交流用,凡未注明引用的均为本人作品,转载请注明出处,如有版权问题请及时通知。由于博客时间仓促,错误之处敬请谅解,有任何意见可给我留言,愿共同学习进步。