00:00
来,那咱们一鼓作气,接着来看一下寇当中这个属性的一个情况,那寇德当中属于情况呢,首先这块呢,自然而然就是我们属性的这个名字,那你怎么知道这属性名字啊,咱不是在这块还提到过说属性的一个通用格式吗?通用格式里边一上来不就是我们这个属性的名字嘛,对吧,这块都是不变的啊,名字呢,都是用两个字节来表示的,这个属性的名字我们看到这是。这是几啊十吧。十的话呢,我们往前找。九。十啊,找到了1234第四行看一下。第四行在这0F0F,这是15个,15个你就从这数这个,你对应的这个就是L呗,嗯,Li是吧。E啊,然后往后数,你就数十个,其实这块也看到了,就是我们这叫line number table line number table呢,就是我们这个,哎,Code当中的这个属性的这个名字行清楚了,清楚以后呢,我们回过来。
01:02
嗯,在这一块,这是我们内部当中,内部的这个属性的名字,这个颜色好像我们用的基本上也用透了都是吧。嗯。还是用这个颜色吧,咱们再找一个。再找一个。这个吧。这样。好,这我就还接着这个往后写,这个大家看的时候你也接着往后看就行,这个呢就是我们扣的当中。中这个属性的名字。扣的当中属性的名字,咱们当前这个属性的名字呢,叫哎或者叫准确说应该叫属性名索引是吧。所以咱们这样写的不够专业。中属性名。中的属性名索引,这个索引呢,既然是个索引,仍然指向是我们常量池当中的一个0A,就是十的那个位置,我们刚才看了看,实际上line number table对吧,那这个line number table呢,接下来就是它的内部的这个信息了,那它的内部信息这块呢,你就别看这个通用的了,咱们往下找。
02:10
找这个line number table,就它呗,Line number table它的这个格式呢,长这个样子。我把这个呢解一下。盯一下对吧,好回过来来过来看一看啊,这个line number table,实际上呢,这个属性咱们在讲上篇讲到什么时候啊,讲到这个占结构的时候,咱们其实带着大家呢,说过这个事,Line table,还有local variable table对吧,那现在呢,先看到是叫line number table这个属性,刚才这不已经是占了两个字节,看的是它的这个属性名的一个索引,说到了对吧,然后接着往下呢,是四个长度的,四个字节长度的叫属性的长度。1234就这吧,属性长度啊。黄的吧。
03:02
在这我们叫做属性的长度。这样行,这个属性的长度呢,大家看到是不是十啊,长度是十,那就接着往后数一个两个三个四个。五六七八九十,哎,其实到这个零巴这块呢,就是结束了我们整个这个方法,结束了我们整个这个属性,那后边这块呢,实际上就是第二个属性,这个属性其实就是咱们说的local variable table,就另外的一个属性,这不有两嘛,一个是叫这个line number table,一个呢叫local variable table,就到这块就结束了。就这十个,在这十个里边呢,我们具体细节再来看一下,你看这块不是有个大括号吗?里边有什么呢?首先呢是有两个,这两个。这个颜色呢,已经快穷尽了,这两个呢,我们称为呢叫start PC,咱们先写上一会给大家解释。
04:02
Star PC好,这个呢,叫star PC这个。嗯,然后再往这个table的一个lengths啊长度是吧,说了呃,下边这个UR呢,称为呢叫line number,就是我们这俩是不是叫line number。Line number对吧。啊,这个我们也换一个颜色啊。嗯,换一个这个。这个颜色不太明显啊。选这个吧,这个呢,我们称为呢,叫做。下划线number。好,那这呢是我们说的这个,呃,0002,这呢是其中的一个叫star PC,然后这个呢,Line number对应的就是这个。诶我诶我看看啊不对,咱们这块呢,整整串了啊,少一个,刚才说这个长度呢是十是吧,长度十呢是到这儿了,然后应该是从这块儿看啊,先是一个U2,这个U2呢叫line number table的一个lengths,就我们当前这个,呃line number table,就我们当这个line number table它的一个长度这个这这是少一个东西啊,这个不是它了。
05:13
结果这样写啊来。下线。我咋说看着有点不太对了呢,The table。这个table。它的这个长度,这个长度呢是二。它的长度是二,这个长度二啥意思啊,下边我一解释你就知道了,这个长度是二,然后下边这个零零呢,它是咱们说的这叫start PC啊。行,这个呢叫star PC,然后呢,再往后这个star PC,往后这个叫line number是我们的这个数。这个数呢,叫做line number。坚持一下,坚持一下,咱们给大家解释。挺过去,这时候别别窒息了,窒息了,下边就下边这个就就就断了啊,这个呢是叫烂。
06:03
Number。突然整这个的时候呢,想起来霍金写的那个果壳中的宇宙,我记得我上这个高中的时候呢,这个图书馆啊,这个图书大厦里边卖的比较火,那个书呢,我印象特别深刻,在第一页呢,写了一段话说呢,懂不懂都是收获,因为呢,毕竟对于所有人来讲呢,这个讲这个宇宙的话呢,不是所有人都能看懂,或者大部分人都看不懂,说懂不懂都是收获是吧?那现在呢,咱们讲这个字检码文件呢,抠的你看一点点去抠,一个字检码,一个字写码,这样去看,当然呢,看起来就会很吃力啊,懂不懂都是收获,但是这块的难度跟讲宇宙比那还差很多,大家只要呢,这块你先先跟得住,一会儿我们一解释你就豁然开朗啊。这个呢叫做star PC,这个呢称为我们叫line number,呃,为什么说这有俩呢,主要呢就是说有两组,这个star PC和line number,所以这呢是咱们说的一组,然后后边这呢又是一组。
07:00
后边又是一组,那就是这个呢,又是一个新的star number,就跟我们这个是一样子的,我给这个客人刷刷一下。确实呢,这样看,看的这个眼都晕是吧?啊,眼都晕了啊,那独刺野马呢,一个个读就是这样的一个弊端,你看我这俩整的颜色有点像了啊。就咱们这只换个颜色吧。就有整列颜色。对,刚才没改是吧,然后呢,嗯,这两个颜色这个呢,我们格式刷刷一下刷到这儿。就这意思,咱们这个呢,长度是二嘛,所以有两组,那两组正好是不是到这块就结束啊。这呢,就是我们刻画的叫line number table,那说到这个LA table呢,咱们先不着急去解读一下你当年这个code属性。里边不是有俩属性嘛,那咱们先不着急说第二个,咱们先把第一个说清楚,那第一个的话呢,要想说清楚,咱们直接来看一下人家解析好的咱就知道了,咱们刚才呢,提到了说这个嗯,In的这个code属性,它里边是不是有俩呀,一个呢叫line table啊一第二个呢,其实咱们一会要说的这个叫local variable table,那针对这个line number table,咱们刚才看到这块刻画的这个信息都有什么呢?
08:07
嗯,首先呢,关于我们这个属性的名字line number table说到了它的长度是十,这不就对应咱们刚才这个确实有点显韵是吧?呃,是不是这个就是十啊。是不是在这属于的长度值是十对吧,然后下边这块呢,说它就有两个啊,长度是二,这个长度二呢,指的就是我们这里边了,你看这块是不是有两行数据啊。是不是就两个数据嘛,两个数据start PC一个是零,一个是四,这个呢是九,这个是十,你看跟我们这块来看。哎,这不就是零,这是哎零七,呃这个这个我这零七,那咱们这块呢,这个为啥零七咱这块不是呢,这个是因为这个问题哈,因为这个代码呢,咱们这个不完全跟就这个行号啊,不完全跟咱们这个资金码文件当时一样,咱不是来回改吗?你看这块吧,这边是这个是一个。我这写的这个是九了是吧,这个是四,这个是十。
09:02
这个是四,这个是十,那在咱这块呢,这个。这个成八了,这个注意它是有点不一样,因为咱们这个代码,这个代码跟咱们当初那个把它拿出来解读的时候呢,这个代码这个当时不是写过这两行这个数据嘛,所以这个行号呢,会有一个变化。啊,注意注意这个问题就行,所以这块呢,不一样是很正常的啊,这个大家不用太关注这个事儿。嗯,行,这呢就是我们说的关于第一组的这个叫line number table,它的一个刻画,然后再往后这块呢,叫0B,这个0B呢,其实就跟我们上边就类似的是一个套路了,这个呢,就是人家的第二,这不俩属性嘛,这是第一个属性line number table,下边这个呢,实际上就local variable table,它其实也是我们这个属性的所有名,所以跟这俩颜色一样。跟刷刷一下,哎,这俩一样,这个叫0B 0B呢是十十一对吧,找一下上面这个11。12,呃,十一十一,11在这是吧,11行,11这看是第1234第五行。
10:05
第五行12345,第五行啊,从这块儿开始,好,你看从这块儿这个是长度是12,然后从这4C开始数,这是第一个对吧?L。然后这是第二个三四五六七八九十十一。12啊,这个我说的12实际上是咱们这个,呃,16进制啊,你就转化成十进制啊,整个来数的话呢,其实就是我们对应的叫local variable table对吧。Local variable table,那这就是我们说的第二个属性的名字。嗯,这跟这没问题是吧,匹配上了,当然属于名的这个索引啊,你去上面去找,然后接下来的话呢,你就找这个local variable table。都table是不是就它呀,这个的表结构来这看。嗯,来这儿看我这样盯一下。行,嗯,把眼眨一眨啊,这看着确实有点眼晕,上这个呢,是我们这个属性名这吧属性名的索引,下边呢又是它的一个长度,那这个还是长度,跟我们这个还是四个字节的格式刷刷一下。
11:12
跟它一样行,再往下的话呢,这又是两个是local variable table的一个length。嗯,是两个字节的,它就只有一个长度是一对吧。跟这个刷一下。这样好刷完了,刷完以后的话呢,这个local variable table length里边,因为你只有一个嘛,然后接着往后看,然后这儿呢,嗯,叫start PC啊star PC跟这个还一样,那这个也是同步的,这样刷一下,这样刷一下,然后下边呢,是这个lengths lengths是这个长度。长度啊,那跟这个不一样了。这个是长度,呃,这个咱们细节化还还。还确实都不太一样了啊,这个颜色估计大家也不是特别好区分了。现在呢,是他这个我们得往后补了。
12:02
在这补一个这个颜色。跟这个是对应的,这呢称为什么呢?就是我们local variable table中。啊,这个ls local web table里边的这个L啊。这啥意思啊?Local variable table里边这个length。啊,咱们先写上啊,一会儿咱们看一看这个已经解读好的这个结构啊,就是局部变量表里边儿这个,呃,相当于是这个长度是吧。Local。Wearable。Table它的这个。啊。内部内部相当于它又是有几个table的这样的几个属性啊,我们这块相当于直接来看一下,比如这块我们打开,打开之后的话呢,你看这里边刻画的我们当前这个局部变量表里边是不是就只放了一个。是吧,只放了一个,咱们就叫变量吧,哎,只放了一个这个变量,这个变量呢,你看它对应这个lengths这块啊,它指的是这个十十啥意思呢?哎,实际上涉及到这个star PC跟这个lengths做一个加和了,这个咱们一会再说啊,嗯,它的这个lengths。
13:10
现在看着你可能还有点懵,或者你要有印象,咱们前面讲这个站的时候,其实说过这个事儿啊。嗯,这个完了以后呢,下边就是这个name index,就是名字的一个索引,这也是俩。用这个吧。哎,跟上面的颜色有点像了啊,换一个。这个其实就是我们这个局部变量表里边的你这个。嗯的,这个什么变量的啊,咱们叫这个索引吧,变量名的索引。边上名这个索引,我把这个颜色跟这个切换成一样的,这个呢叫0CC的话呢,对应的是不是12啊12我们前面去找一下。是13,这个是12 12呢,看一下这是第几行。
14:04
圈123456第七行对吧。第七行123456,第七行好,这个四个长度从这开始数,从这数,你看这块对应的就这四呗。哎,所以在我们这个当前的这个init里边,我们调用了一个这样的一个相当于是一个变量啊,叫做this。嗯,0C。0C啊,那到哪了?知道这了吧。到这儿是吧,然后再下边呢,叫描述符的一个索引,描述符索引是这吧,0D。换一个。这个事儿。嗯,变量的。变量的。
15:01
描述符。所以。把这个颜色再换一下行这个描述描述符这个,所以呢是0DD的话呢,就是13了,对吧。13,那其实就接着我们这个12往后数,这也就是13吧,那接着回过来在这,那就是这个Z4Z之后那这块18个长度,然后在这呗,这块一看,哦,这是一个引用类型的了,引用类型对象类型的,然后com艾特硅谷JAVA1DEMO,其实这就相当于我们是呃,描述符是是什么呢?指明它的类型,这次是谁啊,是我们这个DEMO这个类型的。啊是这个意思,好,嗯,到这儿了,然后下边呢,又是一个index是吧,Index就这个吧。所以我们用一个。好像没什么颜色可用了,那就用黑色吧。这个变量的啊,Index。这样的。好,就用这个黑色来表示行,那么关于我们说的第一个这个code里边又包含了俩属性,一个呢,叫line number table,一个叫local variable。
16:09
Table我们就解读完了,那关于这个local web table呢,这块包含了好几个具体的信息,大家可能也比较懵,那咱们回过来通过这个呢,来进行一个查看,可能就会更清楚一些啊呃,那我们看一下这叫local variable table。然后这里边呢,Start PC lengths,嗯,这个呢,Index是零,嗯,这个呢,对应的是我们说的这个name叫做this,然后描述呢,这不咱们刚才都看的这个信息吗?哎,这里边儿是不是对应的就是我们这个DEMO是吧,这个怎么解读呢,咱们前面讲这个站的时候呢,其实带着大家解读过这个事儿。解读过这个事儿,这个start PC加上这个less就是十,实际上呢,就指明我们当前这个的一个,呃,你当前这个是不是一个Z,这样也算是个变量啊,这个变量它的一个初始的一个作用的这个位置。哎,初始作用的位置啊,然后它这个index呢,就指明它的一个索引索引,因为就一个嘛,那是不是就它呀,那刚才呢,我们是不是也提到过说我们当前这个code的里边,它的这个什么呀。
17:11
九变量表长度是一,这个一呢,其实就是存放的我们这个Z4,它的索引位置呢,就放在这个零的位置,就只有这一个嘛,这个意思,嗯,OK,这是我们说的这个事儿,然后这块对应的话呢,其实还不太好对应。啊,因为涉及到我们这个line number table line number table刻画的是什么呢?它其实刻画的就是我们这个磁解码的这个指令和我们实际这个代码它的一个对应关系,那由于我们这个程序当中,咱们是不是没有写这个阴利的方法,它自动帮我们生成的,所以我们这块还不太好看,是这意思吧。啊是这个场景,那下边注意。下边这块呢,咱们从这个位置开始,下边这块呢,是不是就针对于我们这个叫爱的方法了,然后爱的方法这块呢,大家呢,你仿照我这里边这个解读方式,我就不这样去解读了啊,也确实这个眼有点花,整个这个过程呢,跟咱们刚才这是完全一样的,如果大家呢,你说我我我也不整了,就是你也不想整了,我觉得没关系啊,那就别整了,然后后边这块呢,咱们怎么着啊,其实整个这个套路跟刚才这个是完全一样的,而且这两个方法呢,具体细节呢,也基本上都是一致的,咱呢就别看了,咱就直接呢过来看一下这个爱的方法,咱就直接这样解读一下得了。
18:25
也可以的是吧,这个爱的方法呢,你看它也只有一个属性,这个属性呢叫做code属性,那这个code的属性呢,这个名字这不叫code吗?它这个长度是44,那其实你在这块这不都能匹配的上吗?这不就这一个属性,这是属性这个名叫什么,这不是叫扣的,然后长度呢是3D 3d呢你换上成咱们这个。十进制3D找一下。嗯,看看这第几行。倒数1212345第五行。在这呢是吧,123453D在这这个3D的话呢,大家看到这块对应的是不是叫61,那这个长度是61,那你就这样61那。
19:09
咱们说这一行的话呢,是不是有16个吧,16的话呢,这块呢,是不是有48个呀,48。四九五十五十一好,52 53,五十四五五六五七五八五九六十六十一,哎,这不就61,相当于正好是到这块结束对吧,然后在后边这块呢,下边再具体的刻画,跟咱们这块呢,其实是一个套路,咱就直接呢来这块去看了。给咱们刷新一下啊。现在这个table。刚才我们这个你看刚才这个没刷新,你看这不是还是这就一对在这是吧,然后这块这个line number table的话呢,诶我们这是一个零零的话呢,指的是我们这个自检码指令的这个位置这个零,然后这个零呢,和我们Java程序当中的这个13呢是匹配的,就是这行是匹配的。然后下边这个呢,是十跟我们这个14呢匹配,这个十指的是咱们自己码指定的这个十。
20:06
啊,这个十和我们这个代码当中,这个14呢是匹配的啊是这个意思,是这个意思,在咱们这个课件里边啊,这块有写。关于叫land table,它是用来描述Java源码的行号和自己码行号之间的一个对应关系啊,这个呢是资金码的行号,这个呢是我们Java源代码一个行号,好,那下一个属性呢,我们称为呢,叫local variableb table对吧?那local variableb table呢,这里边提到了,它就只有一个这个属性,咱们在这儿不也看到它只有一个这个局部变量表是吧?然后这里边呢,因为你也没有行参,这里边用到的其实就是咱们说的这个Z啊,这个Z,这个Z的话呢,这个start PC,然后这个length。啊,这就指明它的一个作用的一个长度啊,作用长度Crpc从零开始,然后长度15是吧,OK,那这个这次呢,是我们当前这个DEMO这个类中的这样的一个实例,这个类型相当于指明啊好这块呢,就我们把这个code属性呢,就通过这个插件接开lab呢,我们就解读好了,咱们在这里边我就不带着大家呢再去一点点去解读下边这个事了,跟咱们上边这个in里边这个系呢,基本上是一致的,当然呢,你这块主要也参照一下这个line number table和这个local web table2个对应的这个表结构,在我们这个里边写了一个它。
21:23
一个他就可以了。行这块呢,大家稍微捋一捋,就是我们这用的一个词呢,叫做肯。是没问题的是吧,确实是肯啊。
我来说两句