Java与CC++的⽐较(转)
原⽂链接:
总结⼀下Java的⼩知识,只是想稍微提醒⼀下⾃⼰这些基础的东西,放在这⾥,随时可以阅览和添加⼀下,以免⾛错了⽅向。
1.⾯向对象程序设计
⾯向对象程序设计语⾔可以直观的反映客观世界的真实表象,使软件开发⼈员可运⽤⼈类认识事物所采⽤的⼀般思维⽅式来进⾏软件开发,与⾃然语⾔差距最⼩,是当今软件开发与应⽤的主流技术。Java是纯⾯向对象的编程语⾔。
2.⼏个概念
a.JavaApplication–⽤来开发命令⾏程序、窗体程序、服务器端程序等。
b.JavaApplet–是⼀种嵌⼊到Web页⾯的⽹络应⽤程序,由浏览器内部的Java解释器来解释运⾏,这个其实我觉得现在⽤得很少。
c.JavaServlet–运⾏于Web服务器端的Java程序,可以与客户端的Applet或者HTML页⾯进⾏交互。
d.JSP–⽤于⽣成动态⽹页,基于Servlet技术,在HTML⽂件中加⼊Java程序⽚段(Scriptlet)和JSP标记。可实现程序与页⾯格式控制的分离。
3. 多线程机制
a.线程⼜被称为轻量进程,是⽐传统进程更⼩的并且可以并发执⾏的单位。多个线程可以共⽤⼀个内存区域,共享同⼀组系统资源,其间通信和切换的系统开销要远远⼩于进程。
b.Java环境本⾝就是多线程的,若⼲个线程运⾏,负责必要的⽆⽤单元回收,系统维护等系统级操作;
c.Java提供了⼀个Thread类和⼀组内置⽅法对线程进⾏实时并发控制。
4.Java与C/C++的⽐较
1) 概述
Java其实也是由C++发展⽽来,保留了C++的⼤部分内容,其编程⽅式类似于C++,但是摒弃了C++的诸多不合理之处,从根本上解决了
C++的固有缺陷。使得Java句法更清晰,规模更⼩,更易学,同时更趋于健壮性,安全性和平台⽆关性。
a.全局变量:C++将函数和变量定义为全局的,⽽不加封装,增加了程序的负担,并且往往会由于使⽤不当⽽造成系统的崩溃。
b.Java是完全⾯向对象的语⾔,类将⽅法和数据封装在其内,不能在所⽤的类之外定义程序的全局变量,只能通过在⼀个类中定义public static的变量来实现⼀个全局变量,使得其它类可以访问和修改该变量。这种完善的包装保证了系统的安全性。
2) goto语句
<语句⼀般⽤于⽆条件转移⼦程序和多结构分⽀技术,是C++中的合法语句,造成了程序结构的混乱,不易理解。
b.Java不提供goto语句,使得程序更简洁易读,增强了程序的健壮性。
javaservlet和jsp的比较3) 指针
a.指针是C++语⾔中最灵活也最容易出错的数据类型,易出现由于指针误操作⽽导致的系统崩溃,同时指针操作内存时也经常出错。
b.Java没有指针的概念,更有利于程序的安全。
4) 内存管理
a.C++语⾔中必须通过程序释放内存资源,增加了程序设计者的负担,再次释放已释放的内存块或释放未分配的内存块会造成系统崩溃,忘记释放不再使⽤的内存块也会逐渐耗尽系统资源。
b.Java⾃动进⾏内存回收操作,当⼀个对象不再被⽤到时,⽆须使⽤内存回收器,只需要给它加上标签以⽰删除。⽆⽤内存的回收器在后台运⾏,利⽤空闲时间⼯作,保证了系统资源的完整性,避免了内存管理不周⽽引起的系统崩溃。
5) 数据类型的⼀致性
a.在C++语⾔中,不同的平台上,编译器对简单数据类型分别分配不同的字节数,导致了代码数据的不可移植性。
b.在Java中,采⽤基于IEEE标准的数据类型,⽆论任何硬件平台上对数据类型的位数分配总是固定的。
6) 类型转换
a.在C++中,会出现数据类型的隐含转换,涉及到⾃动强制类型转换,使得不安全因素⼤⼤增加。
b.Java中系统要对对象的处理进⾏严格的相容性检查,防⽌不安全的转换。如果需要,必须由程序显式进⾏强制类型转换。
7) 头⽂件
a.在C++语⾔中使⽤头⽂件声明类的原型和全局变量及库函数等,使得在⼤系统中对头⽂件的维护⾮常困难。
b.Java不⽀持头⽂件,类成员的类型和访问权限都封装在类中,运⾏时系统对访问进⾏控制,防⽌⾮法访问。
8) 结构和联合
a.C++中⽤结构和联合来表⽰⼀定的数据结构,其成员的公有性带来了安全隐患。
b.Java不⽀持结构和联合,通过类把数据结构及对该数据的操作封装在类中。
9) 预处理
a.C++在编译过程中都有⼀个预编译阶段,即预处理器,为开发⼈员提供了⽅便,但也增加了编译的复杂性。
b.Java允许预处理,但不⽀持预处理器功能,提供import语句实现类似的功能。
10) 多重继承
a.C++⽀持多重继承,允许许多⽗类派⽣⼀个⼦类,虽然功能强⼤,但使⽤复杂,⽽且会引起许多⿇烦,编译程序实现也很不易。
b.Java不⽀持多重继承,但允许⼀个类实现多个接⼝,即实现了C++的多重继承功能,⼜避免了C++的缺陷。
11) 操作符重载
a.操作符重载被认为是C++的突出特征。
b.为了保持Java语⾔尽可能的简单,Java不⽀持操作符重载。
12) 函数
a.在C中,代码组织在函数中,函数可以访问程序的全局变量; C++增加了类,提供了类⽅法,但由于C++仍然⽀持C,所以C++程序中仍然可以使⽤C的函数,结果导致函数和⽅法混合使⽤,使得程序⽐较混乱。
b.Java没有函数。作为⼀种⽐C++更纯的⾯向对象的语⾔,强迫开发⼈员把所有例⾏程序包括在类中,可以更好的组织编码。
13) 字符串
a.C++不⽀持字符串变量,使⽤“Null”终⽌符代表字符串的结束。
b.Java字符串类作为Java语⾔的⼀部分定义,⽽不是作为外加的延伸部分,在整个系统中建⽴字符串和访问字符串元素的⽅法是⼀致的。