透过历史聊聊C、C++和Java之间的那点事

1、编程语言哪家强,先看历史长不长

  当今世界,JavaPythonC++等编程语言横行于互联网,各界程序员日夜奔忙,为改变世界的程序梦拼搏奋斗。这些高级语言现在如此之地位,不得不让咱们惊叹。java

​ 自1946年2月14日世界上首款计算机问世,第一代计算机语言“机器语言”便诞生了,当时的“机器语言”使用的是最原始的穿孔卡片,这种卡片上使用的语言只有那些真正的专家才能理解,这种“机器语言”是否容易理解看那个年代专家的秃顶就知道了。“机器语言”本质上是计算机能识别的惟一语言,而人类却很难理解,岂一个“难”字了得。后来那些语言大师们为了能让人们更容易理解,因而便有了第二代的“汇编语言”,相比机器语言,汇编语言仍是有所改良的,尽管它仍是太复杂,人们在使用时很容易出错误,但毕竟许多数码已经开始用字母来代替,这也算一大进步了。简单的“0、1”数码谁也很差理解,但字母是人们可以阅读和拼写的。虽然第二代计算机语言仍然是“面向机器”的语言,但它已注定成为机器语言向更高级语言进化的桥梁。当计算机语言发展到第三代时,就进入了“面向人类”的语言阶段。你能够阅读、并直接用人类的语言来输入。对咱们汉语来讲,目前还不能用中文汉字来输入指令,这主要是由于中文的输入尚未一个很是好的手段。第三代语言被人们称之为“高级语言”。高级语言是一种接近于人们使用习惯的程序设计语言。它容许用英文写计算程序,程序中所使用的运算符号和运算式子,都和咱们平常用的数学式子差很少。高级语言容易学习,通用性强,书写出的程序比较短,便于推广和交流,是很理想的一种程序设计语言。关于这些简单基础常识,能够看看《Java匹马行天下之学编程的起点——走进编程的殿堂》,对于各大高级语言,不要问它强不强,先看历史长不长。我是一名Java程序员,我来谈谈Java的故事。程序员

2、Java的诞生

Java是SUN公司推出的一种计算机语言,先说说Java这个名字的来历吧。Java名称来源于太平洋一个名叫Java的小岛,该岛出产一种味道很是美妙的咖啡。当地人很是喜欢咖啡,Java的发明者Gosling在这个小岛上受到了当地人“特殊”的照顾,让他如痴如醉般喜欢上了咖啡的美味。Gosling认为他发明的计算机语言是很是好的东西,起初他把他发明的语言起名为“OaK”,可是SUN公司的人发现已经存在一门叫作OaK的计算机语言了,而如今尝着如此美味的咖啡,从咖啡的灵感中索性起名为“Java”,流传至今。说实际的吧,SUN公司于1995年正式推出新一代面向对象的程序设计语言Java。看到面向对象,咱们知道面向对象语言(OOP, Object-Oriented Programming)是一类以对象做为基本程序结构单位的程序设计语言。Java 是面向对象编程中的一种表明性语言,但除了Java,还有C++等编程语言也是面向对象编程的表明,咱们研究Java的发展历史,确定摆脱不了它的“竞争对手”C++,而C++又摆脱不了C语言,索性把它们三个放一块儿描述。先看下面这张描述C、C++、Java的时间历程图:
透过历史聊聊C、C++和Java之间的那点事数据库

单从时间上看,1973年C语言问世,而后在C的基础上,1983年C++问世,C++问世的时候已经在C语言的基础上添加了面向对象的思想,而Java是在1995年才出世的,单从C++和Java所共有的“面向对象”这个思想上,咱们也会相信它们之间确定有故事,咱们先去探索它们之间的故事吧。

3、C、C++还有Java,大家之间到底有什么故事

​ 自1973年C语言问世后,在以后的很长一段时间,不少程序员都在用C语言,C语言很受程序员的欢迎,由于它给当时的程序员们编程提供了极好的便利,C语言贴近硬件、运行极快、效率极高,这些便利条件,让当时的程序员们用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。ide

  • .exe文件直接在Windows操做系统下运行,在CPU上运行的是机器码(.exe文件)函数

  • .class字节码文件是运行在JVM虚拟机下的,在Java解释器上运行的是Java字节码文件。
    Java解释器至关于运行Java字节码的CPU,但该CPU不是经过硬件实现的,而是用软件实现的。Java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就能经过解释器程序在该平台下运行,这是Java跨平台的根本。固然,并非在全部的平台下都有相应的Java解释器程序,这也是Java并不能在全部的平台下都能运行的缘由,它只能在已实现了Java解释器程序的平台下运行。工具

    透过历史聊聊C、C++和Java之间的那点事

    透过历史聊聊C、C++和Java之间的那点事

​ 还有,在C++ 中,假如你写一样一个程序,在 Java 里面会报错,而在 C++ 语言里面是不会报错的。为何?

​ 由于 C/C++ 语言设计的思想是:你想怎么写程序就怎么写,只要你的这种写法错得不是很离谱,就认为你这么写有特殊的含义,能够经过。但 Java 不行:只要你这么写有歧义,或者说这样写不太好,那么它都会报错。

​ 好比 C++ 中你能够将一个浮点型数据赋给一个整型变量,编译时只会警告,由于会丢失精度,可是在 Java 中这样写就会报错,它在语法上就禁止你这样写。这就是不一样的语言对一样一个问题有不一样的理解和处理方式。

​ 因为 C++ 中大大小小的问题会致使不安全性,因此就在 C++ 的基础上,取其精华,去其糟粕,便造成了早期的 Java 语言。直到如今,Java 又多了不少新的特性,好比说集合,反射,泛型,Lambda 表达式等等。

​ 正由于从C语言到C++,最后再到Java 的发展历史,使得 Java 在必定程度上继承了多数C语言的语法,但又有必定的改变,而这些改变就是不少程序员喜欢Java的缘由。

以上就是C语言、C++和Java之间的故事,要相信万物一切皆有因果,学习要求因求果。

相关文章
相关标签/搜索