`
香煎马鲛鱼
  • 浏览: 109428 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

C++与Java对比

    博客分类:
  • C++
阅读更多

C++与java对比

大一到大三,我课外课内使用过很多语言,大一是c++,紧接着是java、php,再后来是python,天下语言都是相通的,不过每个程序员都应该掌握一个最称手的兵器,java虽然成熟通用却不高效,php开发网站方便但同样不高效,唯有两个语言可以入我的法眼:python和c++,python方面快捷,开发效率高,好用。C++效率高,我感兴趣的方向是数据挖掘,以后也希望做一个后台程序员,也许c++会用的比较多,而且我心目中的理想公司也在大范围使用。因此决定重新拾起。

可是c++并不是我使用最多的语言,我使用最多的语言是java,为了梳理思路和方便以后的学习,我决定整理出他们的区别,并罗列出更多c++的优势

以下内容来自互联网,由作者整理

资料一:C++ 和java有什么区别:

1.     Java中对内存的分配是动态的:(java拥有智能的垃圾回收机制,可以避免很多错误,因为管理员不必关心内存问题,而c++则采用new、delete来手动分配释放内存)

2.     Java不在所有类之外定义全局变量:(java不在类的外部定义,而是在类的内部使用静态变量)

3.     Java不用goto语句

4.     Java不支持头文件

5.     Java不支持宏定义,而是使用final

6.     Java对每种数据类型都分配固定长度:在java中,int固定32位,c++在不同的平台上长度不同,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位.这使得C语言造成不可移植性,而Java则具有跨平台性(平台无关性).

7.     类型转换不同:在C和C++中,可通过指针进行任意的类型转换,常常带来不安全性,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换.

8.     结构和联合的处理

9.     Java不再使用指针:指针是C和C++中最灵活,也最容易产生错误的数据类型.由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性.而Java对指针进行完全地控制,程序员不能直接进行任何指针操作。

(以上内容来自:http://jingyan.baidu.com/article/fea4511aa1fd0bf7ba912575.html).

基本上这些资料都是向着java来写的,感觉也有些主观。感觉是在写java的优势,它是从编程的角度去分析的,而下面这个资料,则是从应用方面去分析各自的优势:

  Tips:

宏定义:宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。

例:

#define Pi 3.1415926

把程序中出现的Pi全部换成3.1415926

具体可看:(http://baike.baidu.com/view/2076445.htm)

 

指针(这个内容比较多也比较重要,所以请看专题博客):

http://448230305.iteye.com/blog/2191121

 

资料二:

Java开发的最初目的是Web,C++则主要是针对应用软件。所以Java在网络编程中比C++更具有先天的优势,这主要考虑到了Java的高可移植性和易开发性,目前常说的JavaEE就主要是这方面的了。而C++也不是不能够进行网络编程,不过他需要的代价实在太高了,还有移植性和安全性的问题需要考虑,开发效率较低。但在那些系统编程和驱动编程中,则更多的使用C/C++了,这时需要与硬件打交道,Java就不行了,Java还有性能上的先天缺陷(不过现在很多好的Java解释器的优化策略非常好,不过就牺牲了可移植性),C/C++充分利用硬件优势发挥其高效的性能,而且Java能做的,C++几乎都能够做到,反之不然。而且目前绝大数的大型的网络游戏都是C++开发的,3D游戏则更不用说了。但C++的学习曲线远远陡于Java,想擅长精通C++不是简单的事。

http://bbs.csdn.net/topics/310009848

这个说了很多,主要的的几点可罗列为:

1.     Java开发最初的目的是web,c++则主要是针对应用软件。

2.     Java有高可移植性和易开发性

3.     Java更适合网络编程,c++代价高且移植性和安全性问题难解决

4.     c/c++适合系统编程和驱动编程,java有性能上的先天缺陷

5.     c++的学习曲线远远陡于java

 

这些都说得很有道理,然而比较全面系统的介绍应该是我在维基百科里看到的解释,太多了,给大家链接感兴趣可以自己去看哈(http://zh.wikipedia.org/wiki/Java和C%2B%2B的對照),我只罗列出部分不错的:

C++

可选的自动边界检查. (例如: vector 和 string 这两个容器的 at() 方法)

一次编写多处编译

大部分运算符可以运算符重载

Java

 

一般都有做边界检查。HotSpot (java)(Sun 的虚拟机实现) 可以去掉边界检查

 

一次编写多处运行

 

运算符的意义一般来说是不可变的,例外是 + 和 += 运算符被字符串重载了

C++库包括:语言支持,诊断工具,常用工具,字符串,本地化,容器,算法,迭代器,数值,输入/输出,C库。Boost库提供了更多的功能,包括线程和网络I/O。用户必须在一大堆(大部分互相不兼容)第三方GUI或者其他功能库中进行选择

库在每次 Java 发布新版本的时候都会更新并增强功能。1.6版本支持:本地化,日志系统,容器和迭代器,算法,GUI 程序设计(但没有用到系统的GUI),图形,多线程,网络,平台安全,自省机制,动态类加载,阻塞和非阻塞的I/O,对于XML、XSLT、MIDI也提供了相关接口或者支持类,数据库,命名服务(例如 LDAP),密码学,安全服务(例如Kerberos),打印服务,WEB 服务。SWT 提供了一个系统相关的GUI的抽象

Tips:

一次编写多处编译:一次编写,到处编译(“Write once, compile anywhere”,简写为WOCA)是一种编写跨平台计算机程序的哲学,旨在让计算机程序能够在不同的系统平台上编译而不必修改其源代码。和太阳微系统公司的“一次编写,到处运行”口号不同,这种跨平台特性体现在源码层面上,而非字节码层面。

一次编写到处运行:一次编写,到处运行(Write once, run anywhere、WORA,有时也作“write once, run everywhere”、WORE),是太阳计算机系统公司用来展示Java程序设计语言的跨平台特性的口号。理想中,这意味着Java可以在任何设备上开发,编译成一段标准的字节码并且可以在任何安装有Java虚拟机(JVM)的设备上运行。

边界检查:在程序设计中是指在使用某一个变量前,用来检查该变量是否处在一个特定范围之内的过程。最常见的是数组的下标检查,来防止下标超出数组的范围而覆盖其他的数据。

若是边界检查未能发现错误,最常见的结果是程序出现异常并终止运行,但也可能出现其他的现象。

由于每次都进行边界检查非常耗时,而且有些代码是不可能产生越界的问题的,所以这个操作并不总是需要被执行。一些现代的编译器中有被称为选择性边界检查的技术可以略去一些常见的不需要的边界检查来提高程序的性能。

 

小结:其实java和c++各有优势,java的优势在于它的跨平台性,更适合网络编程,同时垃圾回收机制,指针封装,强制面向对象也让它的学习成本较C++小很多,对于运行效率有要求的情况下,C++仍然是非常不错的选择。

分享到:
评论

相关推荐

    面向对象编程:C++与Java比较教程 英文版

    本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...

    C++与java的综述与比较

    ### C++与Java的综述与比较 #### 引言 C++与Java都是面向对象的编程语言,Java从某种程度上来说是基于C++发展起来的,因此它们之间存在着诸多相似性和差异性。本文旨在对这两种语言进行一个全面的综述,并通过对比...

    《C++ for Java Programmers》高清完整英文PDF版

    这本书《C++ for Java Programmers》是为具有一定经验的Java程序员所写,目的是让他们利用现有...通过对比Java语言,本书强调了C++的优势和特性,并在书中穿插了丰富的实例和练习,让读者能够更好地理解C++语言的精髓。

    面向对象编程C++和Java比较教程

    C++与Java在面向对象特性上的比较: 1. 封装:两者都支持封装,即隐藏对象的内部实现细节,通过公有接口暴露必要的功能。C++通过访问修饰符(public, private, protected)来控制成员的可见性,而Java则有类似的机制...

    C++与Java语言对比

    本篇文章将深入探讨C++与Java在数据类型、概念性以及面向对象编程(OOP)三大精神——封装、继承、多态方面的对比。 首先,我们来看看数据类型。C++是一种静态类型语言,它提供了丰富的原始数据类型,如int、char、...

    C++、Java和C_的语法比较.doc

    这里主要聚焦于C++与C#的对比,并适当提及Java的相关特性,以帮助读者更好地理解这些语言之间的区别。 ### 一、继承 **C++**: 支持多继承,即一个类可以从多个基类继承属性和方法。 **C#**: 不支持多继承,一个类...

    Java语言与C++语言的对比分析.pdf

    Java语言的特点首先体现在其类型安全上,所有变量都是对象,并且通过引用的方式访问对象,这与C++使用指针直接访问内存的做法不同。Java的对象始终保持活跃状态,这使得Java在管理对象方面更加专业,能够有效地防止...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...

    C++_Java面向对象程序设计:大学专业课期末复习资料-compressed.pdf

    2. **C++与Java对比**:可以分别列出C++和Java的特点和区别,如编译方式、内存管理、异常处理机制等。 3. **具体案例分析**:结合实际案例,比如银行系统的设计,来展示如何运用面向对象的思想进行系统建模和编码。 ...

    C、C++、JAVA数据结构与算法电子书

    - **栈**:后进先出(LIFO)的数据结构,C、C++和Java都有内置的栈支持,如C++的std::stack,Java的java.util.Stack。 - **队列**:先进先出(FIFO)的数据结构,C++的std::queue,Java的java.util.Queue提供实现...

    C++,java,Go等语言性能对比

    ### C++, Java, Go 等语言性能对比分析 #### 概述 本文档由 Google 工程师 Robert Hundt 编写,旨在通过一种经验报告的形式,对 C++、Java、Go 和 Scala 四种编程语言进行性能比较。本研究关注于不同语言在容器类...

    java和c++对比

    很多初学java的人,包括很多由底层转做java应用的程序员,让你真正的明白java和c++的区别

    The diffenences bwtween Java and C++ (JAVA与C++区别)

    本文旨在对比C++与Java这两种重要的计算机编程语言的特点。从复杂度、语法差异、内存管理等多个方面进行对比分析。 #### 关键词 C++;Java;差异 #### 引言 C++是一种广泛应用的计算机编程语言,它支持静态数据...

    免费:数据结构(c与c++与java三本书高清晰版).rar

    本压缩包包含了三本关于数据结构的经典教材,分别是用C语言、C++语言和Java语言编写的。这三本书分别针对不同的编程语言,为学习者提供了丰富的实践和理论知识。 C语言版的《数据结构》可能是基于Daniel Liang的...

    java c++互通的加密算法

    **Java与C++互通的关键点**: 1. **数据格式一致性**:确保在Java和C++中使用的加密库生成的加密结果是一致的。这可能需要对输入数据和密钥进行相同的预处理。 2. **密钥管理**:密钥必须在两个环境中安全地共享。这...

    Delphi 编程技术与java,php,net.C++编程语言的对比.docx.zip

    Delphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,...

    JAVA c++比较 对比讲解二者不同 代码举例(英文版)

    ### C++与JAVA语言对比分析 #### 一、引言 C++与JAVA作为两种流行的编程语言,在软件开发领域有着广泛的应用。虽然JAVA的设计者熟悉C++并借鉴了其语法结构,但两者之间存在诸多差异。本文将详细介绍C++与JAVA在多...

    C++和Java多态的区别

    本文将对比分析C++和Java中多态特性的实现机制及其差异。 #### 二、C++中的多态实现 在C++中,多态主要通过虚函数来实现。当一个类声明了一个虚函数后,它的派生类可以重写该虚函数。通过基类指针调用派生类对象的...

Global site tag (gtag.js) - Google Analytics