JAVA小白系列之世界发展史和语言执行过程

转载请注明出处和作者,周末有免费学习分享,别忘了加群看通知:250431014

这节课我们来讨论以下几点:

  1. 计算机的发展史
  2. 语言的发展史
  3. C语言的执行过程
  4. JAVA语言的执行过程

前两节我们了解了编程世界和世界内各语言的百花争艳,那么你看这么多的语言,我们是不是感觉学不过来,其实吧,各个语言都是一个妈----计算机,对吧,所以我认为有必要给大家补充一些计算机的发展史,这样有利于对语言的理解和掌握,然后我以C语言和JAVA语言来讲讲他们怎么运行的,让大家能够对于语言计算机的执行过程有个大概的了解,然后在后面我们讲解Java的心脏--JVM的时候大家就没问题啦~,为什么不说C++、Python、Scala呢,是这样的,你看C++是不是就比C多了面向对象,而Python也是和Java也有个心脏----解释器,Scala呢也是JVM作为它的心脏,所以我就以C和JAVA来讲解,这样大家就可以类比学习其他的语言了,这样我觉得是一种最好的方式来学习,毕竟语言太多了,我们选择一样精通了,其他的语言你就没问题了,所以新手不要迷茫,选择一门语言坚持下去弄透了,学其他语言也是分分钟的事~那么我们开始吧。

  • 计算机的发展史

要说到计算机就不得不说说两个大神:图灵、冯诺依曼,还有各种数学家,正是由于他们才有我们现在的计算机,有关这两位大神的故事,大家可以去百度,这里就大致聊聊即可。

图灵当时提出了计算机的大致模型,并说明这东西是可以实现的,然后冯诺依曼大神来将计算机实现出来了,并提出计算机采用:存储器、运算器、控制器、输入设备、输出设备组成并且指令和数据【这里感兴趣的同学可以去百度什么是指令,这里你就当它就是代表了要操作什么就行啦】以二进制来表述【其实就是01010101来表示,因为这样表示简单嘛,就两个状态】,至今我们仍然在用这一套体系。当时计算机是为了用来做数学计算,用来解密,因为当时世界大战嘛,所以第一台计算机的出现就是用来破译地方的情报,当时计算机做得特别大,因为大家都知道计算机的发展也离不开硬件的发展,当时虽然采用了二进制来表示计算机,但是也需要硬件来表示这两个状态,当时人们采用电子管来保存状态,用磁带来存储数据,这就导致了第一代的计算机特别大,第二代采用了晶体管【也就是半导体】减少了很多体积并且增加了运算速度,第三代采用了集成电路【就是把晶体管集成在一起】体积更小,第四代则做得更加集成,称作为大规模集成电路,集成度更大这样体积更小功耗更小,计算速度更大,总结来看一张图:

JAVA小白系列之世界发展史和语言执行过程

 

性能越来越高,体积越来越小,功耗越来越小,集成度越来越大,到最后才有我们现在用的笔记本个人计算机。博主要在此再次感谢这些伟大的先辈~

  • 语言的发展史

这里大家都知道,而且都是广泛说的计算机采用二进制来保存数据,上面说了二进制因为只有两个状态,可以对应于电子元件的充电放电、电流的高电平和低电平【这里不懂得可以百度下哦】,简而言之就是非常容易表示,所以就采用了二进制【补充下进制越大,就能用越少的数字来表示,比如18用二进制来表示就是10010,用八进制就是22,十进制就是18,十六进制就是12。虽然进制大了就能用很少位数来表示,但是不利于计算机的实现,你想想我拿什么来表示这么多状态对吧,所以还是乖乖使用二进制吧】,好了说完了进制,来看看语言发展史:

  1. 机器语言

也许非科班的同学不知道这是什么,其实答案就在上面了,在计算机发展史中冯诺依曼大神表示采用二进制来表示指令和数据,而这就是机器语言,比如说你可以输出00000001表示这是个加法,然后输入00000010是减法等等,这些都是机器语言,所以通俗来说就是手动输入一堆01告诉计算机你要干嘛,这就是机器语言编程。

  1. 汇编语言

这手动输入01代码也太复杂了吧,而且很难记怎么搞,所以人们就想,能不能弄出一个方便人们记忆的语言,结果汇编语言横空出世,类似于这样的:mov eax,1;sub ebx,1;等等,前面的英文表示操作的指令,而后面就是两个操作数:寄存器、立即数、内存地址的值【感兴趣的同学可以百度下汇编语言,这里普及一下,在计算机原理中称一组操作为:操作数、操作码,操作码就是告诉cpu你要干嘛:加减乘除位移等等,而操作数就是要操作的东西,比如上面的mov就是告诉cpu你要把1移动到eax寄存器中,对了这里再告诉一下大家:CPU由寄存器和运算器和控制器组成,寄存器就是临时存放数据的地方~】,然后由汇编器来将汇编语言转为机器语言让计算机运行,那么这里就是更进一步的符合人类的边写习惯了,也方便人们记忆这些个指令啦。

  1. 高级语言

这里的高级语言就是指C、C++、JAVA等语言,那么有了汇编语言为何还要开发高级语言呢?这是由于汇编语言虽然方便记忆,但是难度太大,而且不可能每个程序员都能够有能力去直接操作硬件对吧,所以人们就想能不能降低一些开发难度,让普通程序员也能使用编程让计算机理解呢,就这样高级语言出来了,这些语言的例子我在前几节课讲过啦,这里就不再详述,这样的语言普通程序员也能够进行编程,高级语言通过编译器编程成汇编,然后转为机器代码,又或者直接转为机器代码直接执行加快速度。

那么总的来说,语言的发展史就是一个由繁到简的过程,是为了一步一步降低编程的门槛,更方便大家和计算机沟通。

  • C语言的执行过程

了解完计算机发展史和语言的发展史,我这里要给大家展现一下C语言的执行过程。先请上我写的代码:

#include <stdio.h>

int main(){

printf("%s","Hello World");

return 0;

}

那么来看看这个执行过程是什么:

  1. 预处理

主要把#include <stdio.h>包括的文件替换到当前的文件中。

 

  1. 编译

将上一步处理好的文件进行编译成汇编代码。

  1. 汇编

讲汇编代码转为汇编为机器语言,也就是二进制文件。

  1. 链接

最后将stdio.h中需要的目标文件和汇编后的文件进行链接之后生成可执行文件。

以上过程就是C语言生成一个exe【在windows上】的过程,那么这些过程其实大家不用感到害怕,总结来说就是从高级语言到机器语言的过程。那么这里还有个点没有讲,我打算放在操作系统章节进行讲解,也就是生成好的可执行文件是怎么在屏幕上输出字符的过程。大家敬请期待~

  • JAVA语言的执行过程

有了C语言的执行过程基础,我们来看看JAVA怎么做的:

Public class Demo{

Public static void main(String[] args){System.out.println(“Hello World”);}

}

  1. 编译成字节码

将上面我写的源文件通过java提供的命令javac 编译【具体的我在讲解JAVA的时候再给大家详细说】为字节码【有些类似于汇编代码,他们之间的区别为:汇编代码给汇编器看的,字节码给JVM虚拟机看的】

JAVA小白系列之世界发展史和语言执行过程

 

上图就是一个java的字节码,getstatic类似于汇编的指令,而后面的#2则是操作数,后面的注释//代表了告诉你这个操作数是这个【我会专门开一个系列来专门讲解JVM,大家有个概念就行了,知道哦这就是字节码就行】

  1. 解释字节码运行

将上一步编译好的字节码装载进入JVM中,由jvm的解释器或者JIT即时编译器,解释或者编译为机器语言来执行。

好的,这一节我们就到这里,大家应该对于计算机的发展史和语言的发展史没问题了,通过C语言的执行过程和Java的执行过程了解到了不管怎么解释,怎么编译也好最终还是回到了机器语言,所以我说不管哪门语言都是一个妈,所以大家学精通一门语言其他的语言也是大同小异,看到这一节我相信各位是选择了java所以我们下一节课正式开始我们JAVA王国之旅~