`
xitongyunwei
  • 浏览: 929420 次
文章分类
社区版块
存档分类
最新评论

java和C++ C比较

 
阅读更多

本人是先学习了C,然后接触C++,后对android比较感兴趣,然后又学习了java。


先从C开始说起,它通常在底层,写一写驱动逻辑等等的代码。所谓嵌入式,一般都是C的,学好C,必然离不开数据结构,很多初学者认为C和数据结构是一码事。其实数据结构更多的是一种思想和算法。里面的数据结构,列表,堆栈,树,其实在其他语言也都有使用,只是被封装好了而已。个人总结下C的优点:很清晰,逻辑性相对来说非常强的,更好的与硬件设备打交道(当然C++有时也可以)是因为有指针。缺点,学习难度比较大。

这里有个误区,我觉得我有必要阐述一下,很多人一听到C就是面向过程得,一听到C++,java就是面向对象的。其实这是一个误区,面向过程亦或者说是面向对象完全是我们程序员的思想,语言本身只是一种工具,C也可以面向对象,同样java也会被不好的程序员来面向过程。


着重说C++和java部分吧:

大概是由于我是从C开始学的计算机,所以接触C++的时候只会背书,面向对象,三大特性等等,刚开始并没有能够很好的理解,只是知道c++中有一个类,啥玩意儿的。但是深入一点去看的话,C和C++区别其实蛮大的,首先C++可以很容易的面向对象,C可以面向对象,但非常复杂。主要是因为有了类。所以在应用场合会有比较大的不一样。由于C++的特性,所以它既能进行高效的业务处理,也能有比较好的界面表现。例如我们常用VC++去开发一些windows应用,用qt写linux的应用,C就相对吃力很多了。

C++本来说是对C的继承和加强,它有C的指针,运行高效,同时又能方便的面向对象。但是正是由于C++的这些特性,使得C++成为了一个介于C和java之间的一个“不伦不类”的产品(个人看法)。

再看C++和java吧:

1:大家都知道,java是跑在虚拟机上的,所以具备了比较好的平台移植性,很多C++的朋友要不爽了,C++也是有很好的移植性的。好吧,这个很难界定,但是,我们使用C++去写代码的时候难免会使用到一些操作系统的api,这时候就会出问题了,例如在linux下开启线程和windows下是不一样的,文件操作,等等等等,如果你都使用的自带的库文件,那的确移植没有问题。综上,我们还是可以看出java相对C++比较优秀的可移植性的。

然后,正是由于java使用了虚拟机,所以导致了它的效率远远的低于了C++。

2:C++保留了指针。我们都知道,C++是可以直接去使用指针的,说实话指针这玩意儿真是一个叫人又爱又恨的玩意儿,它用的好,效率大大的提高。用的不好,会导致系统的崩溃。而java的虚拟机为我们把这些东西都封装好了,所以我们在使用java的时候虽然会报一些空指针异常,但是确实让程序健壮了不少。

3:c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。

4:Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。

5:内存管理。我们在c++中可以直接手动的释放内存,但是java做不到,它的垃圾是有虚拟机去回收的,不需要程序员去操作。

6.操作符重载Java不支持操作符重载。操作符重载被认为是c十十的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。

7.预处理功能Java不支持预处理功能。cc十十在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加丁编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)c十十预处理器的功能类似。
8.Java不支持缺省函数参数,而c十十支持c中,代码组织在函数中,函数可以访问程序的全局变量。c十十增加了类,提供了类算法,该算法是与类相连的函数,c十十类方法与Java类方法十分相似,然而,由于c十十仍然支持c,所以不能阻止c十十开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
Java没有函数,作为一个比c十十更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
9字符串cc十十不支持字符串变量,在cc十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinRstringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)J3阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用进行连接操作。
10goto语句
可怕goto语句是cc++遗物,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
l1.类型转换
cc十十中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c十十中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c十十中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
12.异常
JAVA中的异常机制用于捕获例外事件,增强系统容错能力
try{//可能产生例外的代码
}catch(exceptionTypename){
//处理
}
其中exceptionType表示异常类型。而C++则没有如此方便的机制。

至于C++和java那一块,下面一部分是参考的某篇博客,忘了,希望博主不要介意,因为你滴东西好,俺们才会借鉴滴嘛















分享到:
评论

相关推荐

    Java转C++代码工具 J2C

    Java转C++代码工具 J2C

    java与C++互通加解密

    本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...

    各种学习资料 Android Python Java Java web C语言 C++ 教程 视频.zip

    各种学习资料 Android Python Java Java web C语言 C++ 汇编 Android逆向 Arm开发 51单片机 Photoshop 会声会影 Windows Unity cocos2dx 教程 视频 各种学习资料 Android Python Java Java web C语言 C++ 汇编 ...

    java转c++软件(代码级别)

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。

    Thinking in C: Foundations for Java & C++

    Thinking in C: Foundations for Java & C++ by Chuck Allison produced by Bruce Eckel Chapter 1: Introduction and Getting Started40 MinutesStart Lecture Chapter 2: Fundamental Data Types41 ...

    java与c++、c语言的比较文献翻译

    Although it is based on C++, Java is more of a “pure” object-oriented language. Both C++ and Java are hybrid languages, but in Java the designers felt that the hybridization was not as important as ...

    c/c++ 与java互通 AES加密解密,算法ECB

    最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...

    CPlus_to_Java_Converter;C++转java工具

    CPlus_to_Java_Converter(C++转java);C++转java软件

    使用JNI进行JAVA和C++之间的互调

    在VS2013中使用JNI进行JAVA和C++之间的互调,这两个文件只是项目中的一部分,仅供参考

    android 的binder机制在java、c++层的实现

    模拟实现android的binder机制在java层、c++层的模型最小例子。实现在不同进程中的通信。

    利用JNI实现Java调用C++库

    利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。...详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)

    JNI开发Java和C/C++互相传递List集合

    JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...

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

    C++、Java和C_的语法比较 希望能够对大家有所帮助

    java调用C和C++

    JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。  JAVA通过JNI调用本地方法,而本地方法是以库...

    java调用c c++程序实例

    java调用c c++程序实例,java用eclipse编译,c/c++用visual studio2008编译。

    java与c++通过socket通信

    java与c++通过socket通信。其中java作为客户端,c++作为服务器。主要解决了C++中的结构体在java中如何实现和模拟。还有int,float,及字符串的处理。极具代表性。

    java与C++的相互调用

    java与C++的相互调用,使用JNI进行Java与C/C++语言混合编程。

    java和C++通信结构体发送

    NULL 博文链接:https://xblia.iteye.com/blog/1733625

    c、c++和java相关面试知识

    包括c++和java区别、50个C、C++面试题、C语言笔试面试题(最全)、C语言面试题汇总、Java方面、JAVA相关基础知识、Java学习笔记(必看经典)、常见Java面试题和答案、华为笔试题大全(史上最齐全)、经典的软件测试面试题...

    java调用C/C++全过程

    java调用C/C++全过程 JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。  JAVA通过JNI调用本地...

Global site tag (gtag.js) - Google Analytics