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
。
本博客为学习交流用,凡未注明引用的均为本人作品,转载请注明出处,如有凯发k8网页登录的版权问题请及时通知。由于博客时间仓促,错误之处敬请谅解,有任何意见可给我留言,愿共同学习进步。