Java 和 C++ 都是面向对象语言. 也就是说, 它们都能够实现面向对象思想(封装, 继乘, 多态). 而由于 c++ 为了照顾大量的 C 语言使用者, 而兼容了 C, 使得自身仅仅成为了带类的 C 语言, 多多少少影响了其面向对象的彻底性! JAVA 则是完全的面向对象语言, 它句法更清晰, 规模更小, 更易学. 它是在对多种程序设计语言进行了深入细致研究的基础上, 据弃了其他语言的不足之处, 从根本上解决了 c++ 的固有缺陷.
Java 和 c++ 的相似之处多于不同之处, 但两种语言问几处主要的不同使得 Java 更容易学习, 并且编程环境更为简单.
我在这里不能完全列出不同之处, 仅列出比较显著的区别:
1.指针
JAVA 语言让编程者无法找到指针来直接访问内存无指针, 并且增添了自动的内存管理功能, 从而有效地防止了 c/c++ 语言中指针操作失误, 如野指针所造成的系统崩溃. 但也不是说 JAVA 没有指针, 虚拟机内部还是使用了指针, 只是外人不得使用而已. 这有利于 Java 程序的安全.
2.多重继承
c++ 支持多重继承, 这是 c++ 的一个特征, 它允许多父类派生一个类. 尽管多重继承功能很强, 但使用复杂, 而且会引起许多麻烦, 编译程序实现它也很不容易. Java 不支持多重继承, 但允许一个类继承多个接口(extends+implement), 实现了 c++ 多重继承的功能, 又避免了 c++ 中的多重继承实现方式带来的诸多不便.
3.数据类型及类
Java 是完全面向对象的语言, 所有函数和变量部必须是类的一部分. 除了基本数据类型之外, 其余的都作为类对象, 包括数组. 对象将数据和方法结合起来, 把它们封装在类中, 这样每个对象都可实现自己的特点和行为. 而 c++ 允许将函数和变量定义为全局的. 此外, Java 中取消了 c/c++ 中的结构和联合, 消除了不必要的麻烦.
4.自动内存管理
Java 程序中所有的对象都是用 new 操作符建立在内存堆栈上, 这个操作符类似于 c++ 的 new 操作符. 下面的语句由一个建立了一个类 Read 的对象, 然后调用该对象的 work 方法:
- Read r=new Read();
- r.work();
语句 Read r=new Read(); 在堆栈结构上建立了一个 Read 的实例. Java 自动进行无用内存回收操作, 不需要程序员进行删除. 而 c 十十中必须由程序贝释放内存资源, 增加了程序设计者的负扔. Java 中当一个对象不被再用到时, 无用内存回收器将给它加上标签以示删除. JAVA 里无用内存回收程序是以线程方式在后台运行的, 利用空闲时间工作.
5.操作符重载
Java 不支持操作符重载. 操作符重载被认为是 c 十十的突出特征, 在 Java 中虽然类大体上可以实现这样的功能, 但操作符重载的方便性仍然丢失了不少. Java 语言不支持操作符重载是为了保持 Java 语言尽可能简单.
6.预处理功能
Java 不支持预处理功能. c/c 十十在编译过程中都有一个预编泽阶段, 即众所周知的预处理器. 预处理器为开发人员提供了方便, 但增加丁编译的复杂性. JAVA 虚拟机没有预处理器, 但它提供的引入语句 (import) 与 c 十十预处理器的功能类似.
Java 不支持缺省函数参数, 而 c 十十支持
在 c 中, 代码组织在函数中, 函数可以访问程序的全局变量. c 十十增加了类, 提供了类算法, 该算法是与类相连的函数, c 十十类方法与 Java 类方法十分相似, 然而, 由于 c 十十仍然支持 c, 所以不能阻止 c 十十开发人员使用函数, 结果函数和方法混合使用使得程序比较混乱.
Java 没有函数, 作为一个比 c 十十更纯的面向对象的语言, Java 强迫开发人员把所有例行程序包括在类中, 事实上, 用方法实现例行程序可激励开发人员更好地组织编码.
8 字符串
c 和 c 十十不支持字符串变量, 在 c 和 c 十十程序中使用 Null 终止符代表字符串的结束, 在 Java 中字符串是用类对象 (strinR 和 stringBuffer) 来实现的, 这些类对象是 Java 语言的核心, 用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)J3 阳字符串类是作为 Java 语言的一部分定义的, 而不是作为外加的延伸部分;
(3)Java 字符串执行运行时检空, 可帮助排除一些运行时发生的错误;
(4)可对字符串用 "十" 进行连接操作.
9"goto 语句" 可怕 "的 goto 语句是 c 和 c++ 的" 遗物 ", 它是该语言技术上的合法部分, 引用 goto 语句引起了程序结构的混乱, 不易理解, goto 语句子要用于无条件转移子程序和多结构分支技术. 鉴于以广理由, Java 不提供 goto 语句, 它虽然指定 goto 作为关键字, 但不支持它的使用, 使程序简洁易读.
l0.类型转换
在 c 和 c 十十中有时出现数据类型的隐含转换, 这就涉及了自动强制类型转换问题. 例如, 在 c 十十中可将一浮点值赋予整型变量, 并去掉其尾数. Java 不支持 c 十十中的自动强制类型转换, 如果需要, 必须由程序显式进行强制类型转换.
11. 异常
JAVA 中的异常机制用于捕获例外事件, 增强系统容错能力
- try{
- // 可能产生例外的代码
- }catch(exceptionType name){
- // 处理
来源: http://www.bubuko.com/infodetail-3099982.html