00:00
好了,同学们,咱们继续啊,咱们继续啊,再往下那。上节课我们是说到哪儿,说到我们这个Java程序的加载与执行,其实这个理论如果说你理解了,呃,你别看这是没敲代码啊,你要是理解这个理论的话,我觉得学再往后学就门清了啊,你要这个理论理解不了,我觉得,呃,再往后的话就学起来就是比懵懵懂懂的是吧,哎,也不太好,所以这块的话,咱们再把这个重复一下,是这样啊,我们Java重序要分两个期啊,一期是编译期,二期是运行期,运行才是一个最终展示结果的地方,编译期呢和运行期可以在两个不同的操作系统上完成,刚才课间的时候有同学提到什么呢?提到这个Java程序写的这个Java原文件。啊,这个呃,Java源文件和这个生成的这个呃,Class这个自解码文件,这两个文件是不是在Windows上呃和Linux上都是一样的,你这个说的非常非常对啊,我再说一下啊。
01:01
这个编译器啊。你在编译这个Java源代码的时候,编译的时候生成的这个字解码文件,这个字解码文件在你Windows上啊,编译生成的字节码和你在这个Linux上编译生成的这个字节码是一样的啊,是一样的,这个完全都是一样的啊,完全都要么它是怎么做到一次编译到处运行的呢?对吧,它编译声,编译器的方式,编译的原理都一样。编译的原理都一样,所以生成字节码是一样的啊,然后呢,把自节码放到Windows上可以运行,把自节码放到linus上也可以去运行,没有任何问题啊,所以呢,这个问题问的非常好,非常好啊,那么我再强调一下各位啊,程序员先编写的是什么?是点Java结尾的原文件,在这个原文件里边写什么呀?写符合Java语法的原代码,你开发你最挣钱的地方是在哪?就是在这个环上啊,你写这个原代码,写这个程序是你钱的地方啊,但是最终运行的不是,你得先把它变成。
02:12
变成class文件的过程,我们叫编译阶段,编译阶段你需要使用编译器进行编译,编译器是就是这个va啊,就是这个Java Java c就是编译器这个Java c直当你安装上JDK之后,JDK里边会自带一个Java c这样的一个编译器,你通过这个编译器就可以把这个Java源文件编译生成class,但是要注意啊,这个class啊。这块呢,呃,它有可能是一个Java源文件,会编译生成多个class文件,那么这个class文件呢,我们叫做自解码文件,上节课的时候我给大家提了class文件自解码文件,它并不是这个二进制,纯二进制的啊,如果是纯二进制的话,它就不需要Java虚拟机了啊,它仍然需要Java虚拟机去解释生成二进制码啊,所以说这个class文件它是自解码文件,并不是二进制文件啊,并二进制。
03:08
那么到这为止呢,我们的编译就结束了啊,编译就结束了,来这块呢,我写一下这个步骤啊。Java程序加载。啊,Java程序从开发到最终运行吧,经历了什么?第一步。在硬盘的某个位置,随意啊,随意新建一个某某某点。Java文件。啊。第二步。第一步,你新建好这个文件之后,第二步就是使用记事本。或者其他。文本编辑器,例如edit plus。
04:04
用文va。这是第二步,第三步,那你还用说吗?第三步就是在某某某点Java文件中编写符合Java语法规则的Java。源代码编写源代码啊,就第一步你先建文件,第二步你就打开,第三步呢就是写代码,就是写代码,写源代码,写代码之后呢,第四步是干啥是保存。那保存一定要将某某某点儿Java文件保存一下啊,咱们就细致到这种程度,就是说你按照我这个步骤来肯定没有任何问题啊,肯定没有任何问题,先新建文件打开,然后写代码,那哪步最难?当然这步最难对不对?新建文件谁都会打开,谁都会保存,谁都会就这步呗,对吧,符合Java语法规则这个源代码,那你这个是比较比较费劲的,对吧,你要写代码,那保存之后呢?接下来我们第五步是干什么使用。
05:17
使用编译器啊,Java。啊,JDK安装后自带,JDK安装后自带啊,自带使用编译器Java c对谁啊对某某某点Java。文件进行编译。啊,进行编译。好,第六步,如果某某某点Java文件中编写的原代码是符合语法规则的。变异。会通过。如果某某某点Java文件中编写的原代码不符合或者是违背了语法规则,那么编译器会报错。
06:08
编译器报错之后。某某某点class文件,就是class文件是不会生成的啊,报错之后class文件是不会生成的,只有编译通过了才会生成class自解码文件。并且一个Java源文件是可以。生成多个class文件的啊,第一再说一下是新建Java文件,第二诶是打开它,第三是编写,编写完之后保存啊保存保存之后呢,使用编译器呢,进行它编译,编译这一块呢,诶你要注意有编译通过的,也有编译报错的,如果你这个。
07:06
语法合法,那就编译通过,如果语法不合法,你就编译报错啊,其实就是这样的啊,所以这块编译是干啥呀,编译实质上是检查语法。啊,编译实质上是检查语法。啊是检查语法的,了解一下。所以我们可以在直在直接的电脑的Windows系统上编译,再放到服务器上的Linux系统运行,没问题,没有任何问题啊,没有任何问题。这个。就是编译期。啊。那么运行期,编译期。可以在Windows上啊。运行器可以在Windows上。
08:04
也可以在其他的OS上没有任何问题啊,没有没有任何问题。那么。第七步,如果是在linuxx上运行。啊,如果是在零上运行,需要将。Windows上生成的class文件拷贝过去就是这个,我都写上了,你说有多细致,是不是就是说我现在在Windows上编译生成了这个字节码class文件?对吧,生成了class文件,我要运行到Linux上的话,我需要把这个class文件通过U盘也好,通什么方式也好,对吧,咱们拷贝到这个Linux操作系统上啊,不需要拷贝源文件啊,不需要拷贝源代码啊,真正运行的是字解码啊,但源代码也不要删除啊,有用。
09:11
有用,那是你挣的钱,明白吧,你天天这个对吧,费劲巴拉的写代码,目的是啥?挣钱呢,对不对,你这个源代码是你是你的是你的钱啊,是你的钱来这个字体我稍微调的稍微小一点啊。小一点第七步,那么第八步。是。使用什么呀,使用JDK。自带的啊,一个命令或者说是工具。啊,叫做Java。啊,一个叫Java c是负责编译的,一个叫Java是负责运行的啊。
10:01
负责运行的命令啊,或者是工具。啊,第七步是拷过去,第八步是使用这个自带的Java这个命令。执行。自解码。啊执行,至于怎么执行,到时候我会跟大家说的啊,然后第九步是干啥呢。啊,往下的步骤啊,咱们就不用管了啊,往下的步骤咱们不用管了啊往下的步骤。就全部交给谁了,交给Java虚拟机了。啊,就不需要程序员干涉了。啊。Java虚拟机会将什么呀?会将自解码文件装载进去。装载进去啊M,我们的这个就是就是你拷的这个码文就是会载进去啊GVM会将自节码文件装载进去啊,然后JVM对字节码进行解释。
11:20
啊,解释器负责将字解码解释为一零零一一零零一等的二进制。第十步,JVM会将生成的二进制码交给OS操作系统。操作系统。稍等啊,一会儿一会儿再说一下啊,操作系统会执行二进制码和硬件进行交互。
12:00
我说一下啊,整个这个运行期就是GRE在起作用。整个这个运行期就是GRE在起作用。啊一在体现其实是个是。啊,J re,来负责的。这个呢,是我们整个这个程序的一个执行过程啊,从这个图上看的话,其实大家也能看到啊,Class load还没提呢啊,一会儿再提,你现在提这个别的同学就懵了,啥是class loader,是不是你八整出来class loader懵了啊,是类类加载器啊,到时候再说,一会再说啊,就是说是这样的同学们啊,是这样的。我们呢,在硬盘上新建一个Java文件,然后在这个JA文件里面写Java源代码,Java源代码写的你必须得符合语法规则,符合语法规则之后经过这个Java c这个命令啊,一共两个命令,大家记住啊,Java c命令是负责编译Java运行负责运行我觉得这个。
13:00
必须得写上啊。注意注意吧,在以上的过程中,需要使用两个非常重要的命令,Java c命令负责编译啊,Java这个命令负责运行啊,一个负责编一个行啊了解一下,那么经过编译之后会生成一个者是多个文件,有一个小插曲啊小插曲。啊,假设某某某点Java。原文件经过编译之后,啊,生成了a.class。b.class。c.class。等文件。
14:01
啊,那么我们称什么呢?我们称A。是一个类。对。是一个类。C是一个类。其中ABC是类的名字。没有为什么啊,死记硬背各位啊。赞,公司的加法语法就是这么规定的,有同学肯定现在在问,我说老师。别说累累是啥玩意儿,好,我先说一下,先不用管啊,你就知道这个东西啊,生成的是a.class b.class或者c.class那其中把A,把B,把C我们叫做类名。啊,把A版B版C叫做类名。
15:02
类名啊,这是一个自解码文件,这是一个自解码文件,这是一个自解码文件同学记住了啊,你要注意听课,一会儿你不注意听课,你就溜号了,你一溜号你就不知道,哎,老师。他他怎么就是个累了呢,他怎么就是,哎,注意了,我说没有为什么,死记硬背就行了。你现在是某某某点Java文件编译生成了一个或者是多个class字节码文件,而这一种文件啊。这个是。没有为啥,不要问我为啥,我也解释不了啊,这是公司规定的,加上语法规定的。啊,就是你这个文件编译生成这几个文件,我们就就就就叫自解码文件,对吧,文件我们叫字解码,但你把这个点class去掉,光说前面这个名字的话,这个东西就是个类名。我们把它叫做类名。ABC是个类名啊A。BC是。
16:00
类的名称。啊,就是A类B类。啊,C类你看。我如果刚才一个原文件有多个类,对可以没问题,一个原文件可写十个,写100个,写1000个也没问题啊,如果刚才直接去讲类加载器,你就懵了,小军啊,我连类我都还没提呢,我怎么可能去提这个类加载器呢?你说呢,小军是不是?所以说我只有说把这个类的概念给他倒腾出来之后。诶,我才能给大家提类加载器的事儿啊,你不能说这会儿就上来就说类加载器啊,咱们这个是有规规矩的啊,一步一步去让大家去接受啊,你不能叭一下对吧,懵了啊,懵逼了还学啥呀,是不是,哎,咱们入门要入好了,后期咱们就好说了啊,后期就好说了。行了,呃,咱们慢慢来慢慢来啊呃,总会学到很多东西的啊,再强调一下来,这次呢,我的说法呀就变了,各位啊,大家看我怎么去说。
17:06
首先呢,我们是需要在这里建一个Java文件,建建一个JA文件之后呢,我们在这个Java文件里边原文件中写源代码啊写源代码,那原文件写源代码哦,这个源代码的概念我说了吗。原文件中写代码叫源代码啊,原文件中编写的代码叫做源代码啊,源代码啊。那么编写了源代码之后呢,通过Java c这个命令进行编译,生成一个或者多个class自解码文件,而这种class文件呢?啊,大家要记住是最终我们要运行的文件,最终运行和Java原文件是没有任何关系的啊,是和class文件有关系的,那么假如说叫a.class那么我们认为A就是个类名,假如说我们这个文件名叫呃c.class那这个类的名字就叫C啊,就叫C,那么接下来我们整个编译期就结束了啊,就结束了,那么接下来如果要运行的话,我们可以在别的操作系统上运行,你只需要把U用U盘把这个class文件啊拷贝过去就可以了,拷到哪随意啊,你看你在哪运行。那么接下来是我们怎么做呢才能运行呢?我们需要一个命令,这个地方编译需要Java,所以我们运行需要Java这个命令,Java这个命令只要一运行,只要一回车,就是将来你在这个DOS命令窗口里边,只要敲一个Java,敲Java回车妥了,你就不用管了,敲完这个交Java这个命令一回车,诶这。
18:31
这时候啊,他就会。找到你这个什么呀,这个自解码文件啊,找到你自节自解码文件,找到你自解码文件之后呢?哎,假如说啊,假如说这个细节我就不再讲了啊,假如说找到的是a.class那么这个时候哎,它会有一个机制啊,就是在整个jre啊,这个运行阶段就是jre啊整个jre里面有个东西叫类加载加载,这个加载命VA1回车,这个类加载器就会去你硬盘上去找,找什么呀,找你这个自解码文件,直到找到为止,有同学说老师为万一找不到这个这个这个这个自解码文件怎么办?找不到他就报错了啊,他说这个类不存在对吧?哎,到时候你就知道了啊,然后这个类加载器呢,经过一个加载,把我们的自解码文件就是八放到这个Java虚拟机里边了,Java虚拟机呢,它对这个自解码文件进行解释解释解释啊解释之后操作系统能看懂了,然后操作系统一执行就和底层的硬件。
19:34
平台交互了,这样的话就是整个程序的一个加载与执行的过程啊,加载与执行的过程。好,这个过程呢,我觉得是这样,各位啊,大家呢,下去之后呢,应该自己对着镜子啊,自己描述一遍,对,你不用看这个文档啊,你把这个文档关了完之后,你对着自己对对着镜子,你自自言自语对吧,你说一下啊,你说这个程序啊,先干啥再干啥再干啥再干啥再干啥对不对?哎,大家的最主要的一个工作是在哪?是在编译阶段啊,是在编译阶段,最主要你不在这儿嘛,对吧,你是在写这个代码这儿嘛,最主要的是第一步嘛,对不对?哎,这个运行其实非常简单,就一个命令就行了,剩下的什么装载需要你做吗?
20:13
同学们,装类加载器装载需要你去做吗?装载的Java虚拟,Java虚拟机进行解释,解释给操作系统,操作系统再去执行,需要你做吗?都不需要,你只需要一个命令啊,就是这个Java命令就行了。你只需要一个Java命令就完事了,我在这里讲的时候当然讲的很详细,当然是你要做的实际上就是两件事儿,第一件事儿。Java c。第二件事。Java c干啥编译第二件事,Java干啥运行呗,对吧,先编译再运行,先编译再运行就是这个意思,对,至于说运行的每一个环节,每一个细节这一块啊,那大家这块呢。啊,就不用,就今天听了之后啊,了解一下啊,理解了就行,后期呢,咱们这个就不用再说了啊,不用再看了,你直接知道有个Java命令就可以。
21:02
啊行,那这块的话,我再把这个整个的一个复杂的步骤啊,这个环节我再说一下,首先呢,我们需要在硬盘上新建一个点Java结尾的原文件,在原文件中编写符合Java语法的源代码,那编写源代码之后一定要保存,保存之后呢,我们经过一个命令Java c进行编译,编译之后呢,会生成一个或者多个class文件,而这个文件被称为自解码文件,诶特别要注意的是生成的文件假如说叫做a.class那么其中这个A啊,我们叫做类名生成b.class那么OK,这个B呢叫做类名生成什么c.class生成d.class生成f.class文件,我们就称为F为我们的一个类名啊,那么等我们编译结束之后呢,接下来就是运行阶段了,运行的需要一个命令叫Java命令,Java命令运行的时候会去硬盘上找什么?哎,通过类加载器去找我们的哎类找我们的自解码文件啊,找我们自,因为我们最终程序运行的是我们的自解码文件啊,找到自解码文件运行找不到就报错啊运行的话它实际上是把这个。
22:03
文件找到之后。Class文件就经过一个装载到我们的Java虚拟机啊,然后Java虚拟机这边进行解释成1001的二进制,然后操作系统执行一零零一二进制,然后操作我们底层的硬件平台,这就是我们Java从编写到最终运行的一个整个过程,好了,那关于这个呢,我们就说到这儿啊。
我来说两句