您的位置:首页 > 编程语言 > Java开发

JAVA语言入门篇—(第一课)为什么学习JAVA?

2018-12-13 15:22 190 查看

JAVA语言历时十多年,已经发展成为人类计算机史上影响深远的编程语言,时至今日,大部分银行,电信,证券,电子商务等系统已经采用JAVA来构建,或者正在逐渐采用JAVA来构建,已经是应用最广的企业级应用开发语言。下图为2018年11月份编程语言排行榜。

如果你留意每个月的排行榜,你会发现java语言一直稳居第一名,而作为排行第二的C语言,作为大家刚接触编程语言都会或多或少接触一些,因为大一或大二都会有一门《C语言基础》的课程,这是博主接触的第一本关于编程语言的书籍。当然我专业不是学C的,是关于硬件设计方面的,经常会用到的是硬件语言Verilog。那为什么大学中会开这一门《C语言基础》课程呢?那就不得不说一下C语言的历史了,有的人感觉可能有点啰嗦了,但是作为一名从事软件开发人员,不管你学的哪种编程语言,C语言是必须要了解的!

编程语言及C语言的发展历史

C语言作为一种编程语言,他是一种高级语言,哪什么是高级语言呢?那又得说一说编程语言发展的三个阶段。

第一代语言称为:机器语言,机器语言就是二进制,0和1组成,那为什么是0和1呢?因为在硬件中0和1就相当于电路的开关,0表示关闭,1表示开启,而电路中是由数以万计的开关组成,所以有时候说机器语言才是机器识别的语言。

第二代语言称为:汇编语言,博主以前接触过汇编语言,汇编语言在编写过程中有一种和机器“打交道”的感觉,因为是外国人设计的,所以当设计复杂的电路或者机器时候,用机器语言实现是非常困难的,所以他们设计了汇编语言,简单点理解就是将一串机器代码转换为英文单词,但是这些英文单词是怎么转换的呢?不知道你们有没有这样的疑问。转换成英文单词机器还是不认识啊,这里就又不得不说一下指令集的概念,这里我说明一下,不要对任何一个新的名词产生恐惧,软件的发展历史中产生很多很多新的概念,有时候第一次听说会一头雾水,其实任何新的东西都是为了解决当下的一些问题,就比如说这个指令集。 作为一个以前编写机器语言的工作人员,他们成天到晚的编写,都是0或者1,枯燥啊,无聊啊,有时候一个0或者1写错了,那重新找出来还不如重新编写,那他们就想着能不能简单的,比如实现一个简单的加法就写成( add 1,1),那这就实现了1和1相加,那其他的运算都做这样的改变,那就方便多了,但是问题就在于,这么写机器不认识啊,add是啥?1是啥?add是加号,1是阿拉伯数字1,但是机器不认识啊,那怎么办?那可不可以找一段二进制串,例如:001001 就把这个定义为加号,以后写add的时候,同时1也这样定义好,所以这时候就出现了十进制转换为二进制,因为已经定义了加号的二进制,所以以后加法就这样写吧。这就是指令集的由来,把那些运算符号或者逻辑运算符号提前设置为二进制代码,那你就会感觉机器怎么这么笨啊,啥都不知道,啥都要给他提前设置好,就像叫小孩一样,告诉“+”这个符号是加号一样。因为要牢记计算机真的很“笨”,他只认识0或者1,所以不管你想的多么天花乱坠,你怎么让它实现呢?终究是转换为二进制,它才能认识。

第三代语言称为:高级语言,高级在哪里呢?那就是实现“语言”编写,用大量的英文单词来编写代码,这样就更能看的懂了,逻辑也更加清晰了,相比于汇编语言,那时候还是自己丰衣足食,你如果想把add定义为001001那你得自己定义,其他的运算符也得自己定义,工作量还不是很大,那如果要实现几乎所有的英文单词都要定义,那就很麻烦了,但这是人们努力奋斗的方向,那可不可以发明一个东西让他代替我们做呢?让他把英文单词都翻译好。然后让他翻译为二进制,那这样以后我就把我的想法告诉这个东西,他懂我的想法,而他会翻译成二进制,那机器也就懂我的想法了,它就开始工作了。这个想法相当于人和机器之间产生了一种媒介,那这个媒介就是虚拟机,这里你只需记住,虚拟机很“强大”,开辟了编程语言的新的篇章。 我这里只是简单的阐述了虚拟机的作用,很多细节部分都没有涉及,如果你想深入了解虚拟机内部是如何工作的,现在还不是时候,现在只需要记住虚拟机大致是这个作用。那好,虚拟机有了,那编程就相比之前更简单了,最关键的是可以实现更多的更复杂的逻辑运算,而且维护起来,对于外国人来说,英文是他们的母语,那就更方便了,就不用和从前一样,担惊受怕的编写代码了。说了这么多还是没有提及C语言,那现在我们了解一下C语言吧。 C语言属于高级语言,高级语言中有着很多语言,这里我们就不一一讲述了,但是要有一个概念,如果想要学习一种语言最底层的,最初的思想,都要从虚拟机开始了解,所以为什么说虚拟机很“强大”了,加引号是因为还是人们设计的,那它可能又不是那么强大,肯定还是需要改进的。

C语言是在1972年贝尔实验室诞生的,在博主认为C语言为何如此的重要,是因为C语言编写了UNIX系统,UNIX是一种操作系统,之后的LINUX,Windows操作系统都是基于UNIX的改进或者改良,之前我们提及到虚拟机,那操作系统简单点理解就是一个更大的“虚拟机”实现了更多的功能,但是最核心的还是虚拟机。所以C语言的地位是其他语言捍卫不动的,现在编写代码都是在操作系统上编写的,所以你设计虚拟机就必须要考虑操作系统的差距。现在除了这三个主要的操作系统,可能会出现新的操作系统,但是凡事要追其根本,只有你把最基本的操作系统掌握了,了解了它的工作原理,那么如果将来你设计一种更加优秀的操作系统,你才会有设计的整体框架,所有新科技的产生落实到具体,基本都是改良或者改进上一个“版本”。

使用C语言开发软件的一般步骤为:使用编辑器编写源代码(source code);使用编译器将源代码(source code)编译成目标代码(object language);运行目标代码(object language),即编写好的程序。这是C语言开发软件的最简单的步骤,有的可能会分的更加详细,但在这个过程中最关键的是编译器,而C语言也就属于编译型语言

编译型语言是指使用专门的编译器,针对不同的操作系统将某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台能识别的可执行程序的格式,编译生成的可执行程序可以脱离开发环境,在特定的平台独立运行。啥意思呢?你在Windows系统中完成了编译,生成了可执行文件,那这个执行文件只能在Windows操作系统下运行,只有这个操作系统认识。但是如果程序编译完毕之后,还需要在其他平台运行怎么办呢?只能重新在其他的操作系统上重新编译才可以,生成其他操作系统认识的可执行文件,那如果要需要修改某些功能的话,又得重新修改源代码,然后在特定的平台上完成特定的编译才可以,这样编译型语言的运行效率就比较高,因为是编译成为了机器码,机器码是运行最快的了,但是编译型语言的缺点也很明显了。不停的修改源代码,不断的编译。而且编译型语言不能实现跨平台,因为源代码是不会随意传播的,在Windows上生成了可执行文件,如果想在LINUX上运行,又得将源代码放到LINUX上重新编译,而且平台不同,那么至少编译器肯定也就不同,该的东西就更多,所以就很麻烦。现有的C,C++,等高级语言都属于编译型语言。 说完编译型语言,那肯定有不同的了,那就得介绍一下解释性语言了

解释性语言是指使用专门的解释器对源代码逐行解释成特定平台的机器码并立即执行的语言。解释性语言通常不会整体性的编译,是逐行解释,可以认为:每次执行解释性语言都需要进行一次编译,那为什么要一行一行编译呢?这是因为编译一行它就编译为可执行的语言,因为如果你想修改的话,这一行就重新编译,其他行就不用编译了啊,而编译型语言需要重新全部重新编译,好多都重复编译了,这是一个优点,还有就是解释性语言可以实现跨平台,那它是怎么做的呢? 第一步:提供不同平台的不同解释器 第二步:源代码在特定平台上编译,解释器解释为特定平台的可执行文件 **所以说编译型语言和解释性语言最根本的区别就是解释性语言提供了不同平台的不同的解释器,而编译型语言没有提供,这个需要自己根据不同的平台设计。

** 但是这两种语言都没有解决一件事情,源代码泄露的问题,都是讲源代码放到特定平台上编译运行的,难免会造成源代码泄露的问题。那怎么解决这个问题呢?那接着就该介绍一下JAVA语言。

JAVA程序的运行机制和JAVA虚拟机JVM

**JAVA语言作为高级语言,它比较特殊,它既不属于编译型语言又不属于解释性语言,由JAVA语言编写的程序也需要经过编译过程,但是这个编译过程不会生成特定平台的机器码,而是生成一种和平台无关的(.class文件)java语言特有的一种文件,这些平台是不认识这个文件的,然后再提供不同平台的不同解释器(也称为JAVA虚拟机),让解释器将(.class文件)解释为平台认识的机器码。**这样就相当于我给外界传播的是我的java语言特有的(.class文件),这就不会泄露源代码了,而且编译生成的这个(.class文件),只编译这么一次,放到不同平台不同的解释器会将这个同一个(.class)文件解释成机器码。这个逻辑里面,相当于解释器的功能更加强大了,它首先要认识java语言,其次是(.class格式),最后将(.class文件)转换为机器码。因此java语言有时候声称“一次编译,多个平台运行”的说法。这里确实只编译了一次,但是编译生成的是(.class文件),多个平台运行是拿到这个(.class文件),解释器(JAVA虚拟机)完成了后续的工作。

因此我们可以看出JAVA虚拟机是很“强大”的,要想深入了解一种高级语言,都要了解它们的虚拟机的工作原理。但是这里我们只需知道JAVA虚拟机的作用即可,其他的先暂且不做深究。其实仔细想一下,就是人越来越懒,把一些繁琐的事情吩咐给了机器执行,所以有时有些事情表面看起来很简单,实则深究也是很复杂的。

最后,相信大家都简单的明白了为什么学习JAVA的吧?注意这里,只是“简单”。

因为我也只是刚入门JAVA语言的学习,我相信将来可能会出现新的高级编程语言,但是编程语言毕竟是语言,它只会发展的越来越接近人的语言习惯,而且不要惧怕新的语言,编程语言只是一种工具,一种实现人类想法的工具,所以我们尽量将重点放在思想,创新等人的想法上面,就好比那一天你有一个很好的想法,现在的编程语言都实现不了,那你就有可能创造出一种新的编程语言,所以编程语言不管种类有多少,都是一种工具而已,区别就在于工具用的顺不顺手。 ----------------------------------------------------------------------------------------------------------------------------------------------------- 持续更新中…

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: