Java与C/C++的比较(转)

时间:2023-03-09 19:30:29
Java与C/C++的比较(转)

原文链接:Java和c++比较

总结一下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语句

a.goto语句一般用于无条件转移子程序和多结构分支技术,是C++中的合法语句,造成了程序结构的混乱,不易理解。

b.Java不提供goto语句,使得程序更简洁易读,增强了程序的健壮性。

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语言的一部分定义,而不是作为外加的延伸部分,在整个系统中建立字符串和访问字符串元素的方法是一致的。