从本科到研究生毕业,从windos下C编程,到单片机汇编和C编程,到Linux操作系统下C开发,再到光通信算法研究,再到硬件开发,做过的东西很多很杂,有一个特点就是做后一个项目,前一个项目的内容瞬间就会不知道被扔到脑海的那个小角落里,要捡起的时候还要寻摸很久,因此就有了写技术贴的想法,把那些可能遗失在角落的知识整理到网上来,好让自己可以随时观玩,也可以分享给那些同样正在摸索这些知识的小伙伴们,希望大家共同成长。
这篇帖子是我回顾C语言和JAVA学习的一篇技术贴,在C与JAVA的对比中捡起那些基础点滴。
Java和C以及C++的都是高级语言,相比于汇编,或者机器语言的01代码,无疑大大简化了程序员的编程工作,三者很多基础语法结构类似,尤其是JAVA与C++,有一门的基础往往其他几种语言掌握起来会非常容易,抛去与计算机有关的东西,编程语言最后都会归结到算法上来,这是一个基础,同一个功能,三种语言一般都可以实现,只不过难易不同,因此一些招聘要求低的公司,往往会说掌握其中一门编程语言即可。
相比于共同点,掌握JAVA与C的区别才是一个工程师从C转向JAVA或者从JAVA转向C的必修课程。JAVA可以用十一个词来说明它的特点:简单性,面向对象性,分布式,健壮性,安全性,体系结构中立性,可移植性,解释型,高性能,多线程,动态性(具体解释可以参考JAVA白皮书)。从其特点可以看出,实际上JAVA与C最大的区别是C是面向过程的,过程可控;JAVA是面向对象的,忽略过程编写简单功能强大效率较低,这是一个信息量很大的解释,具体可以查找面向对象和面向过程的对比。
JAVA具有更好的可移植性,可以做到跨平台,因为Java是解释型语言,所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行;而C是编译式语言,代码要先通过编译器转换成与系统相关的中间代码,然后才能运行。
再一个不同是,Java不支持系统调用,既无法与操作系统进行交互,这是由它跨平台的特点决定的,而C则可以调用系统中的指令,如fork()。这也就是为什么Java中只有线程(Thread)概念而没有进程(Process)概念,而C两者均有。
再者,Java无法对内存进行控制,而C则可以通过指针对内存进行人为分配。还有一点,Java有Gabbage Collection机制,可以自动回收不再使用的空间,而C则要用free()函数释放空间【http://zhidao.baidu.com/link?url=GHSCSIrf21G9rv4Wq8aBvj6TFxhfl3OqAgtg35_yeldSfXFuUVKv2QsoTuEz3-zul02TiMfwa6UwAeKlR3Crba】。
再具体的从语法上来说,JAVA和C还有很大的不同,下面应用网上总结罗列几个【http://blog.csdn.net/easy_gemini/article/details/8226402】:
1、标识符:
C可用的标识符为数字、大小写字母、下划线,不能以数字开头;
Java可用的标识符除了C的三种以外,多一种美元符号($),同样不能以数字开头。
2、关键字:
C中的关键字有:
auto break case char const
continue default do double else
enum extern float for goto
if int long register return
short signed sizeof static struct
switch typedef union unsigned void
volatile while
Java中的关键字有:
abstract boolean break byte case
catch char class continue default
do double else extends false
final finally float for if
implements import instanceof int interface
long native new null package
private protected public return short
this throw throws transient true
try static super switch synchronized
void volatile while
3、数据类型:
C中的数据类型有:
1)基本类型:整型(基本整型int、短整型short[int]和长整型long [int]以及有符号型[signed]、无符号型unsigned)、字符型[signed/unsigned ]char、浮点型(单精度型float、双精度型double和长双精度long double)、枚举类型
2)构造类型:数组类型、结构体类型、共用体类型