00:00
首先啊,咱们来看第一个方法,第一个方法的话呢,我们就直接来看一下它里边包含的这个信息,我们看一下这个方法表的一个描述,实际上呢,跟我们上面讲的这个字段表呢,实际上类似的情况,字段表呢,我们对应的是这样的几项,那我们来看一下这个方法表里边对应的是哪几项。方法表呢,我们提到了,因为呢你是一个表结构,所以里边呢会有多个方法。或者叫可能具有多个方法对吧?假设呢,我们这里边有三个方法,每一个方法这块呢,都是一个method的iner,相当于每一个方法又对应着一个表结构,那整个呢,这个又是一个构成一个大的一个表结构,就是我们这个method这个表对吧?它呢是用于描述咱们当前类或者接口中的某一个方法的完整描述,完整描述那每一个方法这个音符,这个表结构里边都有哪些项呢?就是我们这个表格里边呈现出来的。首先呢,是有四个U2,或者这里边儿我们把它分成两部分,跟咱们属性这块类似,这三个呢,咱们看成是一个整体,它描述的就是我们当前这个方法的访问标志。
01:01
或者叫访问标识accesslex对吧,比如说呢,你是有public的呀,还是有这个abstract呀,还是static的呀,还是final的呀,等等这样的一些这个标识,这加S咱前面没多说啊,加S呢,是因为有可能我们一个方法呢,是不是多个这个选项的组合呀,它是一个public,同时又是一个static的。比如我们这个static,那它俩的一个组合,那不就相当于就是个复数吗。对吧,这个咱们在前面讲这个类的这个方案标识的时候,不是提过这个事儿吗。它也可能是有多个的这个组合对吧。行,那么第二个呢,叫方法名的索引,说白了就是你当前的方法名叫什么,下边是关于方法的描述符,方法的描述符主要呢,就涉及到了咱们说过哪两项啊。比如说你就想这个我们之前见过这样的,讲这个常量池的时候,我们见过这个结构,一个呢衡量的就是我们这个当前方法的返回值类型,一个呢就是衡量你当前这个方法的形态列表,对吧?这呢就属于我们方法的描述符。
02:03
属性的描述符呢,主要就是属性的类型对吧?行,那这呢是我们说的第一部分,第二部分呢,就是剩下的这两个来衡量我们当前这个方法里边的属性信息。方法里边的属性信息。OK,这个呢,我们当前呢,有两个方法,这两个方法呢,确实还都有这个属性信息,行,那咱们先看这个第一部分,第一部分呢,这里边儿是不是提到了有三项,我把这个呢,稍微的。哎,把把这几个都截一下也行。一直到这儿盯一下来,过来看我们这个DEMO这样的一个类。从这开始就开始了,我们针对于第一个方法的一个描述,首先的话呢,这里边这个U2叫access f flags,那就是这个呗,把这个选中,我们用一下这个颜色来表示。点一下这个呢,是咱们当前这个方法的访问标识。行,那么这个访问标识呢,此时叫零一,那零一对应过来,在我们下边这个零一就是一个public,那就意味着咱们当前这个方法呢,是一个public权限的。
03:11
是他这个权限的好,然后接着呢,我们再往后看。下边这个呢叫0707呢,指的是我们方法名的一个索引。呃,我用的该这个颜色了。方法名索引,一提到这个索引的话呢,我们就去指向咱们的常量值了,这个对应的是零七,这个零七呢,十进制也是零七,嗯,零七我们看是哪个。那就是它对吧,然后这呢是有六个,六个呢,就是从这从这开始一直往后这有六个这个我们找一下咱们这个来看。嗯,六个,哎,就它吧,这个3C 3C的话,你这块往后数六个,但是你看这块呢,对应的X码。
04:02
这是第一个对吧,第二个第三个第四个第五个第六个,那咱们当前这个方法的名字呢,就是in的方法,就是咱们说编译器呢,给咱们自动添加的一个实例初始化方法,叫做in it,它这个权限呢,是一个public的,没问题,好再往后的话呢,这个叫零八。我们再把这个颜色呢,加深一下,换成这个颜色。嗯,加深一下,那这个淋巴呢,衡量的什么呢,是叫描述辅索引。方法描述符索引,那这个描述符索引呢,既然是个索引呢,也指向的是我们这个常量池当中的这个具体的索引项,这个值呢叫淋巴,淋巴呢,那就基于我们这个这零七对吧。零八就是这儿,它这儿呢,是也是一个字符串了,然后是有三个对应的,就是我们这3282956。嗯,在这块去找。在这对吧,那这块呢,就是一个小括号,那这个小括号再过来,然后这个V,那当前我们这个一的方法呢,相当于它的反回值类型呢,是Y的,然后它的这个参数呢,是没有的。
05:10
对吧,没有这个参数,就是我们这两个小括号,就这样个情况,那大家看到就比较清楚了,行,那再往后的话呢,这块是0001啊,再往后的话呢,就是我们这个属性计数器了,是这意思吧,那我们这块呢,也做一个标识属性计数器,这后换一个,比如说紫色的。哎,就是方法的属性计数器啊,这个颜色呢,稍微有点重,咱们再给大家换一下。换一个稍微浅一点的。确定一下。嗯,好,这个呢,就是针对咱们第一个方法,咱先说到这儿,然后再往下的话呢,就是这个属性的集合,这里边儿提到了有一个属性,这个属性的信息描述是什么样子的呢?这就是咱们后边展开的这个情况。
06:03
后边展开类情况,包括呢,我们这个方法咱们知道呢,是不是里边有具体的一些这个资金码指令是吧?哎,其实都在我们这个属性这里边相关的给大家去展示的,那如果我们来看一下给咱们解析好的这个结构的话呢,那就是长这样子了,方法这块我们会看到是不是有两个方法,刚才我们解析的是第一个方法,那对应的就是这个in,那这个in你点开首先看这in本身关于它的一个名字,它的一个描述符,它的一个access flag这块你看我们都能看得到,对吧?再往下的话呢,就提到它这个属性,在我们这里边,这个属性刚才咱们不也看到了,是不是就只有一个属性啊,在这个属性是谁呢?叫做code,这个code呢,一点开我们就会看到这个叫字节码对吧。哎,字节码这个就是它的这些具体的一些指令操作码,操作数,对咱们前面呢,也稍微提到过这个概念,就是这个信息,这个信息呢,包括你要是有一些异常的信息啊,包括我们这里边还会有这个叫line number table属性,Local variable table属性,这些信息呢,都是在咱们接下来的。
07:06
这个从这个位置开始,一直到红色这块结束里边来呈现,因为这块呢,都是属性信息,咱们稍等一下再统一的去说啊,稍等一下再统一的去说,那咱们接着过掉看一下第二个方法。第二个方法的话呢,你要是从这儿来看,就是咱们这个叫爱的方法了,对吧?OK,那爱的方法是从我们这个位置开始,还是按照我们刚才说的这个过程,首先呢,是叫访问标志或者叫访问标识,这个呢也是一个零一,嗯,咱们用的这个颜色呢,在这再重新调整一下。颜色用的是这个颜色对吧。这个方案标识就它零一,跟我们这个是一样的,就指明咱们当前这个爱的方法呢,是一个public的,看一下代码。DEMO确实是一个public的,没问题,好接着我们再往下这块呢,叫0001。颜色我们再调一下这个0001,这个零一,看一下零一的话呢,其实大家如果翻译成十进制,你要自己能够口算的话呢,就是14对吧,14啊,那14呢,回过来来找这个时候呢,是咱们这个方法名了啊十四十三。
08:13
这呢是14 14这块呢,对应的就是这三个,这三个你看这俩一样,其实就是ad就爱呗,确认一下。确认一下,咱们看一下怎么找,在这里边儿是。0100。ADD,大家看一下好找吗?我我我从这块儿往回退吧。Addd。在这呢是吧。在这对吧,这上就我们这一行,嗯,三个嘛,A616464,这不就ADD是吧,就这一个项啊好回过来这呢,相当于指明是咱们当年方法的名字,方法名完了以后呢,再者就是描述符的一个索引也是俩,嗯,就是这两个。
09:05
嗯,这个我们用颜色再深一点,这个描述符的一个缩音,这个是F至15呗,15呢就是。这个了。就是刚才那个ad后边这个情况,这呢也是一个字符串,是这三个信息,那再回过来。这这三个信息,那就是一个两个三个就是对应的,我们这里边的这三项,也就是说咱们当前这个方法呢,是没有参数的,然后它的返回值类型呢,是一个int类型,那我们看一下代码中确实是不是如此啊,反回值类型和它的一个参数的一个情况。没有问题。好,然后接下来的话呢,再往后跟咱们刚才那个说的场景一样,后边这块呢,就是咱们当前这个。嗯,这个我用格式刷刷一下啊,是不是当前你这个方法,它内部的这个属性的。计数器啊。这里有一个属性跟咱们上面的一样,都是一个,而且这两个属性的这个类型也是一样子的,也是叫code的这样的一个属性,然后具体的这个里边的这个情况,又是我们后边这个零零之后的,从这个零零开始,一直到这个零零结束的这个具体的情况了,那这些呢,都是看着我们这个具体的属性里边的这个数据的一个解读了。
10:17
那关于方法层面的这个解读啊,咱们就先给大家介绍到这儿,就是刚才我们说的这个情况,那么剩下的这两个,呃,红的这个标识之前的那部分,还有这个之前部分都是我们关于属性的一个描述,那属性的话呢,咱们下边讲这个属性表集合的时候呢,咱们统一的来说。好,这呢,就是咱们说的这个叫方法表集合的这个情况,大家呢熟悉一下,你也自己呢来操作操作,大家这个一点点比对比对的走一走啊。
我来说两句