C++ 与 Java 语言对比
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++ 。
文章出处:http://www.blogjava.net/Jack2007/archive/2007/11/11/159665.html
C++ 与 Java 语言对比的更多相关文章
- JAVA语言对比C++语言的几个优点和自身的关键特性
之所以写这篇博客不是为了比较JAVA语言和C++语言到底孰优孰劣,而是从语言本身出发进行对比总结程序编码设计上的差别.因水平有限,某些内容可能太过片面,欢迎指正和讨论. JAVA语言在设计上很好地借鉴 ...
- java语言对比,jvm,垃圾回收
1.java/c++/ruby/python集中语言的对比 java和c++ 1,没有指针 2,没有多继承 3,没有const 4,在实现多态上的区别 tc++里面的虚函数,纯续函数和java里 ...
- iOS 开发学习-类的创建与实现,与java语言的对比
Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { //在{}中定义属性(全局变量/实例变量 ...
- 瘋耔java语言笔记
一◐ java概述 1.1 ...
- Java语言与C++语言的差异总结
Java的设计者曾说过,设计这门语言的灵感主要来自于C++. 世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史.所以在Java语言学习过程中,将其与C++语言对比是 ...
- Java语言速览:StackOverflow
关于 java Java(请不要与 JavaScript 搞混)是一种设计为与 Java 虚拟机 (JVM) 一起使用的多用途编程语言.一般将安装了相关工具可以开发并运行 Java 程序的电脑系统称为 ...
- 采用Java语言如何实现高速文件复制?
今天review代码也看到了"大神"用老方法来实现文件拷贝.今天归结一下使用Java语言怎样实现高速文件复制: 代码1--使用文件通道的方式: import java.io.Fil ...
- 概述java语言
1.java语言是什么? java是一门面向对象的高级语言,它吸收了c++语言的各种优点,还摒弃了C++里难以理解的多继承和指针等概念,因此Java语言具有功能强大和简单易用两个特征. 2.java语 ...
- 《JAVA语言程序设计》上课笔记
教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一. 问几个问题 1. 你们到这里来干什么 ...
随机推荐
- [JWT] JWT Signature With RS256 - Learn The Advantages Compared to HS256
The advantage of RS256 over HS256 is RS256 no longer need to share the secret key between client and ...
- ASM(四) 利用Method 组件动态注入方法逻辑
这篇继续结合样例来深入了解下Method组件动态变更方法字节码的实现.通过前面一篇,知道ClassVisitor 的visitMethod()方法能够返回一个MethodVisitor的实例. 那么我 ...
- 洛谷 P2693 [USACO1.3]号码锁 Combination Lock
P2693 [USACO1.3]号码锁 Combination Lock 题目描述 农夫约翰的奶牛不停地从他的农场中逃出来,导致了很多损害.为了防止它们再逃出来,他买了一只很大的号码锁以防止奶牛们打开 ...
- WinXP局域网共享设置
关闭局域网共享 1.不允许SAM帐户和共享的匿名枚举(系统默认是允许的). 组策略-计算机配置-Windows 设置-安全设置-本地安全策略-安全选项-网络访问:不允许SAM帐户和共享的匿名枚举. 设 ...
- 手机用appnium,web自动化用eclips+webdriver2
手机用appnium,web自动化用eclips+webdriver2 吴建清 pycharm 1.安装环境2.pycharm类似eclipse,写脚本,运行脚本3.uiautomatorviewer ...
- 微服务实战(一):微服务架构的优势与不足 - DockOne.io
原文:微服务实战(一):微服务架构的优势与不足 - DockOne.io [编者的话]本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战 ...
- 推荐一款稳定快速免费的前端开源项目 CDN 加速服务
前面学习到什么是CDN,全称是Content Delivery Network,即内容分发网络.CDN的通俗理解就是网站加速,CPU均衡负载. CDN的基本思路是尽可能避开互联网上有可能影响数据传输速 ...
- Thread Safety in Java(java中的线程安全)
Thread Safety in Java is a very important topic. Java provide multi-threaded environment support usi ...
- spring接收对象数组实例
JS var param= new Array(); var one= new Object; one.id = '1'; one.name= 'simba1'; param.push(one); v ...
- GCC 编译 --sysroot
-sysroot 的作用 如果在编译时指定了-sysroot就是为编译时指定了逻辑目录.编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前面加上逻辑目录. 如 ...