00:00
那接下来啊,咱们就按照这个顺序一点点来看,首先呢,简单我们看一下咱们第一章叫class文件结构啊,这里边儿呢,我们要讲解的几个部分。首先呢,第一个是一个概述,那这个概述呢,我们要谈一谈,咱们为什么要学习class文件结构。啊,解决一个为什么的一个问题,那其次的话呢,那我们如何进行学习呢?诶这里边呢,就提到我们的class文件结构啊,这里边呢,我们提到这个呃,细节的部分啊,该如何去解读,这里边呢,我们提供了哎三种解读的方式,那三种解读方式里边最基础的一种,那就是我们一个一个的去读,这里边呢,我们就要关注于这个class文件结构里边的具体的细节部分。这里边儿的细节部分呢,大家再看障碍虚拟官方规范当中啊,写的都非常的清楚,这呢我们啊非常清晰的给大家做了一个梳理,包括呢,我们也拿一个具体的资金码文件呢,带尔在那一点点的往下看啊,这呢是一个非常痛苦的一个过程。那真正我们在开发当中啊,实际上都有一些,哎,比较好的第三方的一些工具啊,这也是我们说到的这个,哎,方式二和方式三,哎这里边呢,提到这个点。
01:07
哎,一会儿咱们来展开说啊,呃,那第一章当中我们重点要说的就是这个class文件结构的这些部分,那这一部分的学习对大家呢,呃,解决我们说Java代码在有的时候代码层面解决不了的一些问题啊,提供了一个很好的思路。那接下来的话呢,我们就提到了使用扎vap这个指令,咱们去解析class文件啊,就是真正的大家如果在开发当中需要呢,去看这个class文件结构的时候呢,一般我们不是适用到这个二进制文件这个层面去看了,而是直接使用这个工具,哎,帮我们进行一个反编译啊好,这呢就是我们这个第一章呢主要内容,首先呢,我们来看一下第一个问题,就是说哎,咱们作为Java程序员,呃,正常来说呢,咱们不需要碰触底层的这个自解码文件,对吧?那我们为什么要有必要了解一下资金码文件呢?呃,这里边呢,我给大家说了两个原因,第一个呢,就是资金码文件使得我们Java语言呢,具备了真正的跨平台性。
02:02
或者说呢,应该叫以Java语言为代表的啊,这种相关的一些语言的这种跨平台性啊,然后第二个的话呢,就是我们提到了透过自建码指令啊,咱们还可以看到一些代码的细节,而这些细节呢,是我们直接通过看代码呢,就是看我们的这个源文件啊,你是看不到的这样的一些特征。啊,那我们看最起码指令就能够看到这些细节啊,基于这样两个主要的原因,好,那首先呢,咱们来看第一个原因。这两句话呀,咱们在讲上篇的时候呢,哎,我给大家提过啊,当然呢,这两句话呢,要记住它第一个呢,我们说张话语言,咱们说呢,叫跨平台的语言啊,一提到这块呢,我们经常会说一句话是吧,哎,叫做right ones。啊,然后run anywhere。对吧,哎,这样的一段话啊,那我们可以呢,翻译成叫一次编写到处运行,也可以翻译成呢,叫一次编译啊,到处运行都是可以的啊,因为Java语言具有跨平台性,我们生成这个自解码文件呢,哎,同样的具备啊跨平台性的特征。
03:06
啊,我们这里来看说,当Java源代码成功编译成字节码之后呢,如果想在不同的平台上运行啊,则无需再次编译。啊,相当于就是我们这个资金码文件呢,也是具备跨平台这样的一个特征的。这里边呢,就提到我们说Java诞生之初的一个目的啊,这个Java源在诞生之初的时候,我们说它就不依赖于特定的物理硬件啊,或者操作系统这个环境呢啊去运行啊,只要呢,我们编译之后生成的这个资金码文件,拿到资金码文件了,哎,我们就能够啊在不同的平台上去运行啊,那么Java呢,就能够解决啊这个程序的一个安全性啊,包括呢,跨平台一致性的这个问题啊,就是基于咱们这个自解码文件。啊,因为Java程序呢,咱们不是说直接就把它翻译成这个,呃,具体平台的那个机器指令了啊,因为具体平台的机器指令我们知道呢,是不一样子的,对吧?比如说你在这个呃Java程序你在Windows下,在linus下啊,或者说呢,我们so这个呃操作系统下等等,他们翻译出来这个机器指令是不一样子的啊,那就不具备跨平台性怎么办啊,哎,我们先翻译成这个S级码文件啊,是这样子的。
04:16
好,那么第二句话啊,说这个优势啊,哎,不再那么吸引人了,那就是我们一提到说障碍语言是跨平台的语言,这个呢,吸引力啊已经很低了,为什么这么讲呢?哎,像我们说这个Python啊,哎,PP啊,Per啊,Ruby啊,啊像lisp啊这样的这个语言呢,这个脚本语言,哎他们呢,依靠着他自己强大的这种解释器是吧?哎天生呢就跟平台无关。啊,所以说人家这些语言呢,呃,也算是叫跨平台的。啊,这也是目前呢,主流的语言的一个啊主要特征。是吧?哎,下边也说到了,说跨平台性呢,似乎已经快成为一门语言必选的一个特征了。哎,是这样一个特点哈,所以呢,哎以前呢,我们呃,最初的时候啊,有张va园一说,它的主要好处呢,叫跨平台性,那现在的话呢,其实已经来说不那么吸引人了,对吧。
05:08
那与与之相对应的呢?我们提到了叫Java虚拟机,Java虚拟机呢,我们用最简单的一句话来概括,它叫做画语言的平台。啊,跨语言平台,Java语言呢,不是咱们讲Java虚拟重点要谈论的这个点,对吧,Java虚拟机才是啊Java虚拟呢,不仅啊,它提供了跨平台这个功能啊,它还主要还提供了这个跨语言的这样的一个特性。啊说Java虚拟机,虽然我们现在称为呢叫Java虚拟机,但是呢,它不跟Java语言呢来进行一个捆绑啊,它只于我们说的class文件啊进行一个捆绑。那通过这个图呢,大家看的比较清楚,就是我们的Java虚拟集,它对接的就是磁解码文件,那至于说这个磁解码文件,你是用Java语言编译生成的,还是用啊,像Colin啊,Groo啊,Scla呀,嗯,Jason啊,杰Ruby呀,Jascript呀,嗯,Closure啊等等,哎,不管你是用什么语言,这个编译之后生成的子集码文件我不管,只要呢你遵循。
06:12
Java虚拟机官方啊规范的说资金码文件的这个规范啊规定就是我们下面要讲的这个内容,对吧,只要你遵循这个规定呢,那都可以运行在啊Java逊尼之上。啊,这个咱们在上边呢,其实也提到过这个问题啊,所以说呢,我们说Java虚拟机啊,应该说呢,是我们现在大家认可的啊,最强大的虚拟机基本上是没有任何意义的啊,它呢能够实现语言的一个哎跨平台主要呢,就是因为啊,它只跟自己码文件呢打交道啊,任何语言只要呢,按照啊Java虚拟机规范的最起码文件的标准,对写自己的编译器啊,然后生成这个对应的最行码文件啊,那就具备了跨平台的特征。啊,就是你这个语言就具备了跨平台的特征啊,这个class文件呢,哎这呢,就看到是我们Java群尼的这个基石和桥梁。
07:01
啊,基石和桥梁OK啊,这个大家应该能很好的理解哈,像以前的时候呢,咱们一提到说这种跨平台啊,通常会想到微软的这个岛ne的平台是吧?啊,因为do ne平台应该算是咱们讲的叫跨平台的一个典范啊,不管是C叉也好,还是VB也好,是吧,都可以在我们这个do net平台上进行一个执行。啊,但是呢,呃,Java语言出现之后啊,尤其呢,Java虚拟机啊,这个起来之后呢,借助于Java呢,强大的这种社区的力量啊,这个Java虚尼超越这个导弹的平台啊,这个是一个必然的趋势了啊。好,那么下一个的话呢,大家会看到啊,这个我们中篇呢,学习这个扎虚拟的话呢,我们诶经常会要参照这个官方的一个规范,那这个规范的话呢,这是我做了一个截图啊,大家呢,可以把这个地址呢,CTRLC一下粘到我们这个浏览器这块。大就进来了哈,呃,这要Java语言和Java虚拟机的一个诶规范啊,这个刚开始学习Java语言的时候呢,我来看一下这个官方规范的时候呢,呃,有一点呢,就觉得你这个不太理解啊,那现在的话呢,很清楚啊,大家呢,你看你是不是也有同样的问题啊,什么问题呢?就是我们为什么说这个Java语言呢,他每次在发布一个新版本的时候呢,呃,都会提供两个东西。
08:15
发现了没有?第一个呢,叫Java语言的一个规范,第二呢叫做Java虚拟机的一个规范是吧。正常来讲的话,我们说Java语言,那你这这里边儿包括虚拟机应该含在里边了,是吧,没有必要提供两个,那为什么提供两个呢。啊,其实可以这样来解释啊,就相当于Java语言呢,在发布之初的时候呢,其实设计者就曾经考虑过哈,说呢,JA化语言呢,是这个你自己这门语言的一个呃语法规范对吧,那我们扎va逊尼呢,呃,它是具备这个跨语言平台的这样的特征的,那不不仅仅呢,是给我们Java语言去使用的,那其他语言也是可以用啊,所以说呢,单独的就把扎瓦逊尼的这个规范呢给它,哎单拎出来了。啊,是这样的一个原因对吧?啊应该很好理解啊好,那我们这个学习Java虚尼的话呢,重点关注的就是它了啊大家如果学习Java语言的话呢,哎,那你重点关注的就是上面这样个文档,那这块呢,我们点击这个HML,那就能够整个进入我们这样的一个官方的规范啊那咱们讲中篇的话呢,还是以Java吧为主体来进行讲解。
09:21
涉及到后续的一些新特性啊,咱们也会给大家稍微的提一下啊,是这样一个情况啊,那么关于这个呃,Java虚拟官方规范当中字解码文件这块的一个讲解呢,我们主要呢,是在这个第四章,As the class file form。啊,这里边儿呢,做了一个讲解,这就咱们这个中篇啊,大家呢,会经常来参照的,我们这个部分啊,这个大家了解一下啊。呃,这句话你看所有的扎虚拟集全部遵循扎虚拟机规范。啊,也就是说呢,所有的Java虚拟环境啊,都是一样子的,这样呢,一来资金码文件呢,可以在各种诶Java虚拟机上呢进行运行啊,这个呢,我们说现在主流的比如说华为呢,有自己的华为的虚拟机啊,这个IBM呢有IBM的虚拟机,这是用的比例比较高的啊,然后淘宝呢也有淘宝的啊等等啊,不管是什么虚拟机,都遵循了Java虚拟的这个官方啊,就是orac口人家出的这个规范,对吧?那既然都遵循这个规范了,我们写的Java程序呢,就可以运用在各种不同的这个虚集之上。
10:19
咱们在上篇第一章也讲了很多的这个虚拟机是吧,当然有一些呢,已经是一些历史性的那产品了,是吧?啊,已经不再被使用了啊。好,下边嗯,我们就提到这个问题,这个我们这个使用的呢,是词解码文件啊,就是自解码文件,本身是跨平台的这个特征,那把Java程序呢,翻译成词解码文件,谁做的呢?这里边就提到了,叫编译器。哎,就提到这个编译器,那么这个编译器呢,哎,现在来看就凸显就比较重要了,因为呢个编译器呢,需要遵循Java虚拟的规范生成呢,符合虚拟规范的这个四拟码文件的一个标准。啊,那哎,那这个编译器呢,呃,相较于咱们后边咱们还要讲到这个git编译器,这呢我们称为呢,叫后端编译器了,那前边这个呢,我们自然而然的给它起个名字的就叫做前端编译器。
11:09
那前端变器的主要任务啊,这个大家呢了解一下。就是负责将符合Java语法规范的啊Java代码翻译成啊符合啊GM规范的资接码件。啊,非常清晰对吧?啊,那不管Java语言有编译器,那其他语言只要呢,提供你各自的编译器啊,符合Java虚拟的这个自行码文件的标准规范,你就可以呢,在我们Java虚拟上呢,进行解释运行啊就是这样个情况。那咱们平时呢,用的最多的啊,是这个Java c的啊,前端编译器,它呢就负责将Java源程序呢,翻译成自行码文件,这里边呢,需要经历四个步骤。词法解析啊,语法解析,语义解析和生成字写法啊,这个大家了解一下就可以了。啊就可以了啊,然后我们再看下边这个Oracle呢,官方发布的这个GDK呢,我们准确的来讲呢,实际上可以把它分成两个部分啊,第一个部分呢,就是前期的,哎,我们把这个Java源代码呢,编译成这个资金码文件啊。
12:11
这个或者叫自己码文件中包括的这个相关的指令集,这里边我们使用的叫前端编译器啊,以及呢,哎,我们以这个类的加载器为代表的,后续的相关包括垃圾回收器啊,包括我们叫后端的这个编译器啊,还有解释器啊,啊为集合的叫运行式环境。啊,是由这样的两部分呢来构成的。啊,那咱们呢,去理解这个编译器如何与Java这个虚拟机进行协同的工作。啊,注意哈,这个前端这个编译器跟咱们续集是两部分,就是编译器,前端编译器是前端编辑器,它并不包含在我们的障碍虚拟集当中。这个我们去理解呢,前端编译器呢,对于咱们这个理解跟Java虚拟呢,如何进行协同工作啊,对于编辑器开发人员来讲呢,其实是有好处的啊,也有助于我们去理解这个克拉斯这个了解这个大虚尼的这个本身是吧。
13:05
好,这呢是我们先做了一个关于我们为什么要讲解学习这个咨询码文件的第一个原因。
我来说两句