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