• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 作文范文 > 正文

    Java与C++的比较 Java和C

    时间:2019-01-27 03:34:14 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘 要:Java和C++都是非常流行的计算机编程语言,Java作为C++衍生出来的一种优秀的语言,和C++有很多相似的地方,但仍然存在一些显著的差异,文章比较了这两种语言的主要差别,把握住两种语言的差别,对于我们学习能起到事半功倍的作用。
      关键词:JVM 指针 模板 虚函数
      
      C++语言在C语言的基础上加入了面向对象的元素,在C++语言基础上又衍生出Java。Java语言借鉴了C++很多成功的经验,同时又摒弃了C++语言的一些“不足”。
      1.Java编译成字节码,有Java虚拟机(JVM)负责解释执行,这就使得Java运行具有跨平台性,同时也降低了执行速度;而C++直接编译成可执行代码,因此C++的执行速度比较快,但其跨平台性低于Java。
      2.与C++想比较,Java语言放弃了指针,使用了垃圾回收机制,很好地避免了在C++语言中由于指针使用不当造成的程序崩溃和内存泄露,增加了安全性能。
      指针是C和C++语言编程中最重要的概念之一,也是最容易产生困惑并导致程序出错的问题之一。利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯;并能像汇编语言一样处理内存地址,可以有效地对变量进行底层操作,直接操作变量的地址。非常方便好用,使代码变得更简洁。从而编出精练而高效的程序。指针极大地丰富了C和C++语言的功能。但是指针也带来了很多问题,例如不正确地使用会导致错误甚至整个应用程序崩溃,同时指针带来了很多的安全隐患,它也是令很多初学者头痛的难题。Java语言明确说明取消了指针。
      3.C++允许多重继承,Java则只能单继承,Java要实现多继承,只有借助与接口。
      4.Java不支持操作符重载。操作符重载被认为是C++的突出特征。Java语言不支持操作符重载是为了保持Java语言尽可能简单。
      5.自动内存管理Java中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于C++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:Read r=new Read(); r.work();语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要进行删除。而C++中必须释放内存资源,增加了设计者的负担。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。Java里无用内存回收是以线程方式在后台运行的,利用空闲时间工作。
      6.模板。模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。Java范型非常类似模板,泛型本质上是提供类型的“类型参数”,它们也被称为参数化类型(parameterized type)或参量多态(parametric polymorphism)。其实泛型思想并不是 Java 最先引入的,C++ 中的模板就是一个运用泛型的例子。GJ (Generic Java)是对 Java 语言的一种扩展,是一种带有参数化类型的 Java 语言。用 GJ 编写的程序看起来和普通的 Java 程序基本相同,只不过多了一些参数化的类型同时少了一些类型转换。实际上,这些 GJ 程序也是首先被转化成一般的不带泛型的 Java 程序后再进行处理的,编译器自动完成了从 Generic Java 到普通 Java 的翻译。 GJ 程序的语法在表面上与 C++ 中的模板非常类似,但是二者之间有着本质的区别。 首先,Java 语言中的泛型不能接受基本类型作为类型参数,它只能接受引用类型。这意味着可以定义 List,但是不可以定义 List。其 次,在 C++ 模板中,编译器使用提供的类型参数来扩充模板,因此,为 List 生成的 C++ 代码不同于 List 生成的代码,List 和 List 实际上是两个不同的类型。而 Java 中的泛型则以不同的方式实现,编译器仅仅对这些类型参数进行擦除和替换。类型 ArrayList 和 ArrayList 的对象共享相同的类型,并且只存在一个 ArrayList 类。
      7.虚函数。在C++中,虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。多态指同一个方法根据其所属的不同对象可以有不同的行为。而在Java中所有的函数都默认为虚函数,其自动实现了虚函数的机制,这是较C++进步的地方。
      8.Java是纯面向对象的语言,C++则不同。Java作为纯面向对象的语言,很好的体现了面向对象编程的思想;C++作为C语言的“超集”,保留了C语言的结构化编程,加入了面向对象的编程部分。所以C++不是“纯”的面向对象的语言,它是面向结构和面向对象混合的语言。
      总之,Java衍生于C++,它们语法上有很多相似的地方,但是Java也在上述几个地方与C++有重大区别,在学习Java和C++时,把握住它们的联系和差别,可以起到事半功倍的效果。

    推荐访问:Java

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章