1.编程语言哪个强?员工们日以继夜的忙碌着,为改变世界的节目梦想而努力奋斗。这些高级语言在今天的地位不得不让我们大吃一惊。自1946年2月14日世界上第一台计算机问世以来,第一代计算机语言“机器语言”就诞生了。当时,“机器语言”使用的是最原始的打孔卡片。这张卡片上所用的语言,只有那些真正的高手才能看得懂。这种“机器语言”是否通俗易懂,从那个时代专家的光头就可以看出。“机器语言”本质上是计算机唯一可以识别的语言,但人类却很难理解。怎么会“难”呢?后来,为了方便人们理解,那些语言大师们想出了第二代“汇编语言”。和机器语言相比,汇编语言还是有进步的,虽然还是太复杂了,人们用起来不太方便。容易出错,但毕竟现在很多数字都开始用字母代替了,已经是很大的进步了。简单的“0、1”数字,任何人都不容易看懂,但字母表却是人们能读会拼的。第二代计算机语言虽然仍然是“面向机器”的语言,但它注定要成为机器语言向更高层次语言演进的桥梁。当计算机语言发展到第三代时,就进入了“以人为本”的语言阶段。您可以直接用人类语言阅读和输入。对于我们中文来说,目前还不能用汉字来输入命令。这主要是因为没有很好的中文输入手段。第三代语言被称为“高级语言”。高级语言是一种接近人们使用习惯的编程语言。它允许用英文编写计算程序,程序中使用的计算符号和公式类似于我们日常使用的数学公式。高级语言简单易学,通用性强,编写的程序比较短小,便于推广和交流。它是一种理想的编程语言。2、Java的诞生Java是SUN公司推出的一种计算机语言。先说Java这个名字的由来。爪哇这个名字来源于太平洋中一个叫做爪哇的小岛,该岛出产一种非常美味的咖啡。当地人非常喜欢咖啡。爪哇的发明者高斯林在这个小岛上得到了当地人的“特殊”照顾,这让他爱上了咖啡的美味。高斯林认为他发明的计算机语言是一个非常好的东西。起初他将自己发明的语言命名为“OaK”,但是SUN公司的人发现已经有一种叫OaK的计算机语言,现在喝起来真香。一直流传至今。老实说,SUN在1995年正式推出了新一代面向对象编程语言Java。看到面向对象,我们就知道面向对象语言(OOP,Object-OrientedProgramming)是一类以对象为对象的编程语言。基本程序结构单元。Java是面向对象编程中的代表语言,但是除了Java之外,C++等编程语言也是面向对象编程的代表。我们在研究Java的发展史的时候,一定不能摆脱它的“竞争对手”C++,而C++也摆脱不了C语言,所以我就简单的把他们三者放在一起描述一下。先看下面这张描述C、C++、Java的时间历程图:单从时间上来说,C语言是1973年出来的,然后在C的基础上,1983年C++出来了。C++出来的时候是已经在C语言的基础上了。加上了面向对象的思想,而Java是1995年才诞生的。从C++和Java共有的“面向对象”的思想来看,我们也会相信他们之间一定有故事.让我们先来探讨一下。它之间的故事。3.C、C++和Java,你们之间有什么故事?因为它为当时的程序员编程提供了极好的方便,C语言接近硬件,运行速度极快,效率极高。服务器、数据库、操作系统、网络系统等等。但是世界上任何事物都有优点和缺点。C语言的缺点在于指针和内存管理。指针虽然威力无比,可以直接操作内存,但是没有检查越界的工具,导致很多新手程序员容易出错。至于内存管理,就更无语了。自己分配的空间必须自己释放。C语言最头疼的就是上面的问题编译器是找不到的。它们只会在程序运行时突然暴露出来。你想,程序员把大量的时间和宝贵的精力花在精心处理指针和内存分配上,程序员怎么受得了。还有一点就是C语言所谓的可移植性欺骗了很多程序员。它声称在一台机器上编写的程序可以在另一台机器上编译,但事实并非如此。C语言要求程序员要使用标准的C函数库。其次,如果遇到一些平台特定的调用,需要针对每个平台都写一份。稍有差错,编译就会失败。这些都是C语言的一些缺点。1983年,贝尔实验室推出了一种新的编程语言C++,它增加了面向对象的特性,与C兼容,具有静态类型检查,性能良好。其实最早,C++是在C语言的基础上加入了面向对象和模块的思想,也可以理解为C++中两个加号的由来。但是,C++在面向对象方面并不是很擅长。比如C++支持多重继承,多重继承会带来不确定性。再比如,C++也支持指针,直接对内存底层进行操作。虽然效率高,但风险系数非常高。比如一个简单的病毒程序可以通过指针来完成:如果你在一个程序中随机给指针赋值,你就可以获得不属于这个程序执行空间的其他空间的访问权,那么这就是一台计算机病毒。(当然,真正的病毒不可能这么简单,但这是基本属性)。所以后来Java在C++的基础上去掉了指针,增加了引用,提高了安全性。说白了,C++只是C语言的升级版,但C语言的缺点在C++中依然存在。直到后来,1995年,Java才由SUN正式推出,Java的一些特性开始受到程序员的欢迎,比如不再像C语言那样的指针,不需要考虑内存管理,有真正的可移植性,一次编写,到处运行,为了实现跨平台,Java在操作系统和应用程序之间增加了一个抽象层称为Java虚拟机。用Java编写的程序都是在虚拟机上运行的,除非有个别情况,否则不需要看操作系统。刚才提到了一个专业术语叫跨平台,我来解释一下:跨平台的概念是软件开发中的一个重要概念,是指不依赖于操作系统,不依赖于硬件环境。在一个操作系统下开发的应用程序仍然可以在另一个操作系统下运行。Java的跨平台是相对于其他编程语言而言的。用Java语言编写的应用程序可以运行在不同的系统平台上。一种通用的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。例如上面提到的C语言,在Windows系统上编译的C语言程序不能在Linux系统上运行,而Java语言在不同平台上运行时不需要重新编译。Java跨平台的原理:Java跨平台是通过Java虚拟机(JVM)实现的。把Java源程序想象成我们的C源程序,Java源程序(.java)编译后生成的字节码(.class)就相当于C源程序编译后的二进制可执行文件。JVM虚拟机相当于一个计算机系统(操作系统+硬件环境),Java解释器相当于一个CPU。exe文件直接在Windows操作系统下运行,机器码(.exe文件)在CPU上运行。class字节码文件运行在JVM虚拟机下,Java字节码文件运行在Java解释器上。.Java解释器相当于一个运行Java字节码的CPU,但CPU不是硬件实现的,而是软件实现的。Java解释器实际上是特定平台下的应用程序。只要实现特定平台下的解释器程序,Java字节码就可以通过解释器程序在该平台下运行,这是Java跨平台的基础。当然,并不是所有的平台都有对应的Java解释器程序,这也是Java不能在所有平台上运行的原因。它只能运行在实现了Java解释器程序的平台上。还有,在C++中,如果你写同样的程序,在Java中会报错,而在C++语言中则不会报错。为什么?因为C/C++语言设计的思路是:程序你想怎么写就怎么写,只要你的写法不太错,就认为你写的有特殊意义,可以通过。但是Java不行:只要你写的有歧义,或者说写的不是很好,那么它就会报错。比如在C++中,你可以将一个浮点型数据赋值给一个整型变量,编译时只会发出警告,因为会丢失精度,但如果用Java这样写,就会报错,这禁止你在语法上这样写。这意味着不同的语言对同一个问题有不同的理解和处理方式。由于C++大大小小的问题都会导致不安全,所以早期的Java语言就是在C++的基础上形成的,取其精华,去其糟粕。直到现在,Java已经有了很多新的特性,比如集合、反射、泛型、Lambda表达式等等。正是因为从C语言到C++,最后到Java的发展历程,使得Java在一定程度上继承了C语言的大部分语法,但又发生了一定的变化,而这些变化也是很多程序员喜欢的原因爪哇。以上就是C语言、C++和Java之间的故事。我们要相信万物皆有因果,学习需要因果。
