logo资料库

java/c++区别.doc

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
C++和 JAVA 的区别 JAVA 和 C++的区别介绍框架纲领如下: (一) 序言: (二) 我学习二者的个人感受: (三) 个人建议: (四) 用 JAVA 中继承的特性来描述 C++和 JAVA 的关系图示: (五) JAVA 和 C++的区别(前言导读): (六) JAVA 和 C++的基本区别(开始华山论剑) 1)JAVA 摒弃的 C++内容。 2)JAVA 的新特性。 3)JAVA 和 C++都有却不同的特性. (七) JAVA 和 C++的区别详细介绍(对部分知识点的扩充): (八) C++与 JAVA 区别小总结: 开始进行: (一)序言:本人整理的资料几乎涵盖了所有的方面,也可以说包含了用百度搜索能搜到的 几乎所有的内容,并参考有关书籍资料,耗时将近 12 个小时。可以说它 是互联网上资料最全面、 最具有代表性的二者的区别总汇,当然它没有一本专门介绍二者区别的书更具有权威性和全面性, 但是我相信你通过这些内容足以解决你在 实际工作或学习中遇到的编程问题! 其中所涉及到的内容不乏有拷贝的内容,但大部分是经过自己分析和思考而整理出来的,并 对某些别人上传到互联网上的资料做了进一步的修改和说明。不是说我们从别人那里 ctrl+c 一下 放到自己的家门儿就算是 ok 了,我们尽可能的要向资料的准确性和版权性付相应的责任。 这样一方面对自己有很大的提高,另一方面只有这样才能给广大同仁提供更准确和更丰富的 信息内容,大家才能共同提高和进步. (二)我学习二者的个人感受:
我最初学习的是 Java,后来又学习 C++,虽然二者都是面向对象的语言(C++是半面向 对象语言),但是在 C++的学习过程中,C++“几乎完全”没有规则性或者超灵活性的语法让一 个之前学过 JAVA 语言的人感到很不爽!!! Java 确实是个很不错的东西,尤其是其背后有强大的类库做支撑,用起来感觉那是相当的 爽,但速度也确实是个问题。幸好现在的 Java 语言,其执行方式已经不仅仅是解释执行方式了, 即时编译器(JITC、just-in-time compiler)技术和原型编译技术的出现大大提高了 JAVA 的运行 效率。 C++灵活无比,但纯属高级玩具或者高深的九阳神功,假如玩不好,就把自己绕进去,如 练奇门遁甲一般走火入魔,如果玩好了,那可就是强大致极啊! C++在设计时因为必须完全兼容 C 语言又必须提供所有的面向对象特性所以最终它的结构 变得特别复杂,当引入泛型编程 STL(标准模板库)之后显得更加复杂。 Java 是在 C++的基础上开发出来的,比 C++简化很多,容易使用很多,但是在有些方面特 别是泛型方面明显没有 C++使用起来灵活。在某些功能上也稍逊于 C++,例如对于图像的剪切等 方面的技术。 (三)个人建议:所以我认为如果先学习 C++再来学习 JAVA 会容易很多。先学 C++就 好比一开始你是穿着裤子进行 110 米跨栏,再学习 JAVA 就好比你是穿着裤衩进行跨栏,没有那 么多的乱七八糟的东西或者越弄越复杂的东西,显得干净利落,在增加了多个新特性后又不失功 能的强大。要不有人曾经打比方说:Java 就是 C++这个超级重装骑兵脱下盔甲下了马换上短剑拿 起轻盾再背一把可替换的 AK47。 当然,如果有人想学习 JAVA,也没有必要非得从 C++开始学起,我说的是如果有人需要 两种语言都学的话,这个流程还是可以考虑的! (四)下面我用一个 JAVA 中继承的特性来描述 C++和 JAVA 的关系: class C++ { protected String attribute=”构造函数、new 关键字等等”; C++( ){System.out.println(“我 C++是 JAVA 的爸爸!”); } void C++的家产( )
{ System.out.println(“我有家财万贯:结构体或联合体、枚举、指针、操作符重载、预处理、 支持自动的类型转换、全局变量或全局函数、多 继承析构函数、支持 typedef、可以声明无符号 整数、goto 语句、delete 操作符、标准库函数、wchar_t 型、支持异常处理等等”); } } class Java extends C++ { //我完全继承了父亲的属性 Java( ){System.out.println(“我 JAVA 是 C++的儿子!”); } void C++的家产( )//儿子重写 C++的家产( )这个方法 { System.out.println(“我有更值钱的东西:我用类来代替结构体、我有 API 来代替标准库函数、 我有 finalize( )函数来代替析构函数、我的 char 类型是 16 位的 Unicode 字符来代替 wchar_t 型、 内置的字符串类型 String 来代替 C++中的 string 类、我捕捉一个被引发的异常来代替 C++的 异常处理机制。”); } void JAVA 新属性( ) { System.out.println(“我不单单和父亲在相同的领域做的比他更好,我还涉及了他没有涉及到 的领域:我拥有自己的包、多线程和接口、自动 内存管理机制、>>>操作完成无符号的右移、文 档注释等等多元化的市场策略,涉及到了房地产、金融、健身美容、生物医药等领域,呵 呵!”); } } (五)JAVA 和 C++的区别(前言导读): JAVA 和 C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘, 多态)。而由于 c++为了照顾大量的 C 语言使用者,从而兼容了 C,使得自身仅仅成为了带类的
C 语言,多多少少影响了其面向对象的彻底性!JAVA 则是完全的面向对象语言,它句法更清晰, 规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,摒弃了其他语言 的不足之处,从根本上解决了 c++的固有缺陷。 用 C++可以使用纯过程化的编程,也可以是基于对象的编程,还可以是面向对象的编程, 当然大部分是混合编程,c++可以跨平台(我强调一下必须是用标准 C++,就是调用标准库函 数写的程序跨平台才能非常容易,不能跨平台的是 VC++等 IDE(也就是说你用 VC++写出来的 C++程序就不能跨平台,其实 Linux 下的 G++编译器对标准 C++支持得很好,注意:不要混淆 C++和 VC++的概念。)[/color]java 是纯面向对象的语言,其最大的特色 Write once ,Run anywhere! 作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无 疑是非常熟悉的。事实上,Java 本来就是从 C++衍生出来的, 而且 Java 语言的对象模型几乎 就是 C++对象模型的简化版。然而,C++和 Java 之间仍存在一些显著的差异。可以这样说,这 些差异代表着技术的极大进 步。一旦我们弄清楚了这些差异,就会理解为什么说 Java 是一种优 秀的程序设计语言。 Java 和 c++的相似之处多于不同之处,但两种语言因为有几处主要的不同使得 Java 更容易 学习,并且编程环境更为简单。 (六)JAVA 和 C++的基本区别(开始华山论剑) 先来探讨一下 C++和 JAVA 的基本区别。 这些不同之处大致分为三类: 1)JAVA 不支持的 C++特性。 2)JAVA 的独特之处。 3)C++和 JAVA 都有但是却不相同的特性。 详细讨论这三类: 1)JAVA 摒弃的 C++内容. 有些 C++的内容特性 JAVA 并不再支持。在某些情况下,一个特殊的 C++特性和 JAVA 的运行环境不相关。另一些情况下,JAVA 的设计者舍弃了 C++中某些重复的内容。还有一些 情况是,出于对 Internet applet 的运行安全问题的考虑,JAVA 不再支持某些 C++的特点。 C++和 JAVA 之间的最大不同可能是 JAVA 不再支持指针。指针使 C++语言成为功能最 强大最重要的一种编程语言。但同时指针在使用不正确的情况下也是 C++中最危险的部分。 JAVA 不支持指针的原因主要有两点:
(1)指针本身就非常不安全。例如,使用 C++的状态指针,可以访问程序代码和数据段外 的内存地址,一个恶意程序可以利用这个特点破坏系统,完成非法访问(如获取口令等),或者违 反安全限制。 (2)即使指针可以被限制在 JAVA 的运行系统中(这在理论上是可行的,因为 JAVA 程序是解释执行的),JAVA 的设计者相信它们仍然是麻烦所在。 注意:既然 JAVA 中不存在指针,那么也不存在->操作符。这里还有一些非常重要的”省略”: a)JAVA 不再支持操作符重载。 操作符重载在某些情况下造成类 C++程序的含糊不清,JAVA 的设计人员感觉它带来的麻 烦要比它带来的好处多。 b)JAVA 不再包含结构或者联合。在可以完全包含它们的类出现后,这些结构成为冗余部分。 c)JAVA 不再包括预处理,也不再支持预处理指令。预处理在 C++语言中已经不如 C 中那 么重要,JAVA 的设计者认为是彻底消除预处理的时候了。 d)JAVA 不支持自动的类型转换,因为这种类型转换导致精度降低例如当从长整型转换为整 型时,必须显示强制执行类型转换。 e)在 JAVA 中的代码必须封装在一个或者多个类中。因此 JAVA 中不再包含所谓的全局变量 或者全局函数。 f)JAVA 不再允许默认参数。在 C++中,当过程调用时存在没有对应值的参数时可以使用 一个预先指定的值。JAVA 不再允许这样的操作。 g)JAVA 不支持多继承,即不允许一个子类继承多个父类。 h)虽然 JAVA 支持构造函数,但是不再支持析构函数[/b]。但是,JAVA 增加了 finalize( )函 数。 i)JAVA 不再支持 typedef. j)在 JAVA 中不再可能声明无符号整数。 k)JAVA 不再支持 goto 语句。 l)JAVA 不再有 delete 操作符。 m)JAVA 中的<>不再重载 I/O 操作。 n)JAVA 中,对象只能由引用传递,C++中对象可由值或引用传递.
2)、JAVA 的新特性。 JAVA 中的许多特性是 C++中没有的。其中最重要的三个方面是多线程、包和接口,还 有其他的许多独特之处都丰富了 JAVA 编程环境。 1)多线程允许两个或者多个相同的线程并发运行。 而且,这是一种在语言级支持的并发机制。C++中没有类似的机制,或者说 C++采用的 是单线程的体系结构。如果需要并发执行一个 C++程序,必须利用操作系统的功能手工启动。 虽然这两种方法都可以同时执行两个或者多个线程,但是 JAVA 的方法清楚而且便于使用。 2)C++中没有可以与 JAVA 包对应的特性。[/b]最近似的是用一个公用头文件的一组库函 数。然而,在 C++中构建和使用库函数与在 JAVA 中构建包和使用包是完全不同的。 3)JAVA 的接口与 C++的抽象类相似(C++中的抽象类是包括至少一个纯虚函数的类)。 [/b]例如,C++的抽象类和 JAVA 的接口都不能创建实例。两者都用于指定一个子类实现的一致 接口。两者之间最大的不同之处在于接口更清晰的表明了这个概念。 4)JAVA 提供一个流线型的内存分配机制。 与 C++类似,JAVA 支持 new 这个关键字。但是,不支持 delete 关键字。当对象的最后 一个引用撤销时,对象本身被自动地删除,并进行内存垃圾回收。 5)JAVA 丢弃了 C++的标准库,将它替换成自己的 API 类集合。[/b]它们功能上有相似之 处,但是名字和参数有显著的不同。同时,因为所有的 JAVA API 库都是面向对象的,而 C++ 库只有部分是,所以库例程调用的方式不同。 6)JAVA 增强了 break 和 continue 语句以接收标记。 JAVA 中的 char 类型是国际通用的 16 位 Unicode 字符集,所以能自动表达大多数国家的 字符。这与 C++中的 wchar_t 型相似。使用 Unicode 字符增强了代码的可移植性。 7)JAVA 增加了>>>操作,完成无符号的右移。 8)除支持单行和多行的注释之外,JAVA 增加了第三种注释方法:文档注释。文档注释以结 尾。 9)JAVA 包含一个内置的字符串类型叫做 String。 String 在某种程度上和 C++提供的标准 string 类很相似。当然 C++中的 string 只有在程 序中声明后方可使用,它并不是内置的类型 3)、JAVA 和 C++的不同的特性。
1)JAVA 和 C++都支持布尔类型的数据,但是 JAVA 实现 true 和 false 的方式和 C++不 同。在 C++中,true 是非零值,false 是零。在 JAVA 中,true and false 都是预先定义好的常 量,并且是一个布尔表达式能得到的唯一的两个值。虽然 C++也定义了 true and false ,并指 定为布尔变量,但是 C++自动将非零值转换为 true,零值转换为 false。这种情况在 JAVA 中不 会出现。 2)在创建 C++类时,访问说明符应用到一组声明中。而 JAVA 中,访问说明符仅应用于其 限定的声明中。 3)C++支持异常处理,这与 JAVA 类似,但是在 C++中无需捕捉一个被引发的异常。 (七)JAVA 和 C++的区别详细介绍(对部分知识点的扩充) (1) JAVA 的运行速度(JAVA 最大的障碍在于速度) 解释过的 Java 要比 C 的执行速度慢上约 20 倍。无论什么都不能阻止 Java 语言进行编译。 当时刚刚出现了一些准实时编译器,它们能显著加快速度。当然, 我们完全有理由认为会出现适 用于更多流行平台的纯固有编译器,但假若没有那些编译器,由于速度的限制,必须有些问题是 Java 不能解决的。 许多企业的应用开发人员非常喜爱 Java 的语言特性,但是在开发重要系统时,语言特性和 执行效率之间的抉择往往令人伤透脑筋。在关键计算中,用户可能并不 在乎数据如何压缩或者运 行的延迟关系如何设置,但是对程序的运行速度却非常重视,这使厂商将 Java 的编译策略开发 放在了首位。现在的 Java 语言,其执 行方式已经不仅仅是解释执行方式了,即时编译器(JITC、 just-in-time compiler)技术和原型编译技术已经被许多厂家采用,包括 Sun、IBM、Oracle 以及 Netscape 等公司在内的技术提供商正在利用这些技 术逐步提高 Java 的执行速度,其中 IBM 公 司早已将 Java 虚拟机(JVM,JavaVirtual Machine)、操作系统和硬件的特性有机的结合在一 起,非常有效地提高了 Java 的执行效率。 (2)JAVA 所有东西都必须置入一个类. Java 是完全面向对象的语言,它不再支持 C++程序时所使用的过程式的设计方法,所有函 数和变量部必须是类的一部分。除了基本数据类型(例如整型、字符型、布尔型等)之外,其他 的数据对 Java 来说都是对象,包括数组。 对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。 JAVA 不存在全局函数或者全局数据。如果想获得与全局函数等价的 功能,可考虑将 static 方法 和 static 数据置入一个类里。而 c++允许将函数和变量定义为全局的。此外,Java 中取消了 c/ c++中的结构和联 合、枚举这一类的东西,一切只有“类”(Class),消除了不必要的麻烦。
JAVA 的语法其实是参照 c++的语法诞生的,但是她去除了 c++中的多重继承,指针,delete 等难于掌握的技术,为了便于移植和安全性,java 采用了纯面向对象技术,即使是主函数 public static void main(String[] args){}也要放在主类中,可以看出和 C++的明显区别。 (3) 在 Java 中,类定义采取几乎和 C++同样的形式。 但没有标志结束的分号。没有类声明,只有类定义。 (4) Java 中没有作用域范围运算符“::”. Java 利用点号做所有的事情,但可以不用考虑它,因为只能在一个类里定义元素。即使那 些方法定义,也必须在一个类的内部,所以根本没有必要指定作用域的范围。我们注意到的一项 差异是对 static 方法的调用:使用 ClassName.methodName()。 除此以外,package(包)的名字是用点号建立的,并能用 import 关键字实现 C++的“#include” 的一部分功能。 例如下面这个语句: import java.awt.*; #include 并不直接映射成 import,但在使用时有类似的感觉。若想使用另一个库里的类,只 需使用 import 命令,并指定库名即可。不存在类似于预处理机的宏。 c/c 十十在编译过程中都有一个预编译阶段,即众所周知的预处理器。预处理器为开发人 员提供了方便,但增加了编译的复杂性。JAVA 虚拟机没有预处理器,但它提供的引入语句(import) 与 c 十十预处理器(#include)的功能类似。(注意:只是类似而已) (5)JAVA 中没有预处理功能 的详细介 绍 不再有#define、#include 等预处理程序(Preprocessor)的功能。C++语言很重要的一个特点 就是它的预处理程序。有些其他程序 语言虽然也加入了#include 的功能,但是还是欠缺处理宏 (Macro)的能力。#define 的功能在 Java 中我们可以用定义常数 (constant)的方式来取代,而 #include 在 Java 中是不需要的,因为在 Java 中程序在执行时,会把类型数据记录在对象实体之 中,我们不 需要靠一些标头文件(header file)来知道我们使用的对象或数值是属于什么数据类型。 如果你使用 C++语言时,只使用预处理程序的#include 和#define 功能的话,那么你大概不 会觉得 Java 这样的设计对你产生什么样的困扰,但是如果你是使用 C++语言预处理程序中宏功 能的高手,你可能会觉得很不方便,进而怀疑 Java 如此设计的意义何在。 使用预处理程序虽然可以很方便地达到许多功能,但是站在软件工程的角度上看,对整个软 件的维护其实是很不利的。由于 C++语言中预处理程序的功能太过强 大,厉害的程序设计高手
分享到:
收藏