00:00
访问标识啊,咱们就说到这儿,下边呢,我们来看下一个结构,叫做类索引,父类索引和接口索引集合好,那么这一项的话呢,准确的来讲,其实是包含三个内容,它表达的就是当前我们这个类名字叫什么,当前这个类的父类呢是谁?然后当前这个类呢,实现的接口有哪些?你看注意我这块说的有哪些,因为我们说在Java当中啊,咱们是类的单继承性,所以呢,对于一个类来讲呢,它只有一个负类,这里呢,我们用一个U2就是两个字节呢来刻画就可以了,但是对应呢,一个类实现的接口是可以呢,有多个接口的,对吧?所以这里边儿我们又涉及到一个表结构。就是你实现的多个接口,那既然出现表了,那咱们由于自解码文件当中是不是没有,咱们反复的去提到是没有这个分隔符啊,那既然没有这个分隔符出现表结构了,在表结构前边大家呢,也有这样的一个意识到,一定会有一个叫计数器。
01:00
就是来记录一下你这个表结构中这个元素的一个个数,对吧?所以呢,关于我们这个接口的这个表结构呢,前面也有一个interface count,它呢也是用一个UR来表示的,那也用个UR来表示就是,所以呢,我们涉及到这个个数的这块,计数器这块呢,都是一个UR,这个大家注意一下,行这呢就我们说的这样的几个结构对吧?那首先呢,我们来看一下这个第一个部分,第一个部分呢,我们叫Z_class啊,也是一个UR,那对应到我们这个文件当中。那就是我们这个方案标识它的下边就是这个结构吧,这个我们又换一个颜色。这个色有点重,嗯,咱们换选一个其他的颜色吧。这块。嗯,比如这个绿色啊,确定一下行,它呢就表示的叫哎this class是吧,哎当前类的一个描述啊。当前类索引好,当前类索引呢,这时候这个值呢是零三,零三呢,它其实就指向了咱们常量池里边的一个零三,这个索引零三。
02:05
这个是零三对吧,这个零三这块呢,对应的这个值呢是14,这个14呢,转换成16进制。再转换成十进制啊,是20好20的话呢,是不是就对应到我们这个里边的这个吧,那这个20,然后回过来。哎,这个我看看在哪啊,嗯,这个是零零。0016。哎,应该是在这块了,对吧,然后这个呢,往后大家看啊,这个往后一顺,其实就发现这不就DEMO吗。啊,艾特硅谷Java一下的这个DEMO,所以呢,它来刻画的咱们当前这个类的话呢,是不是就是这个DEMO这样的一个类吧。没有问题的对吧,那这是它,然后再往下呢,这个位置两个字节,它刻画的就是它的这个是不是负雷啊。嗯,我们换一个,比如这个事儿吧。负类索引。好这个负类,所以呢,这块写的是零四,那零四对应的就是它了。
03:03
对吧,然后这个值呢是15。这个值的是15 15呢是21 21呢,又回过来,对应的还是我们常量池里边这21,这21呢,如果大家还有印象,咱们前面的刻画的时候,这个是不是就是咱们说的那个object呀。啊,就这块儿呗,所以说就当前这个类的负类呢,就是object。哎,确实呢,咱们当前DEMO这个类,咱们没有显示的去声明它的父类,所以呢,它的父类呢,就是object类啊这呢,我们就找到这个追根溯源了,到最起码文件这块呢,就能够标述清楚对吧。好,那对于咱们说的一个特殊的类,这个类呢,就是object,所有的类除了它之外呢,都有负类,Object类类呢,它就没有类了,那如果我们看额债这类的这个资金码文件的话呢,在它的这个负类这个位置。啊,那就是0000了,就相当于它是没有负类的,嗯,这个大家要注意一下啊,行,那关于我们说这个,呃,当前类和它的负类呢,咱们就说到这儿,然后接下来呢,我们看第三个结构叫做interface啊接口有个复数对吧,所以这里边儿涉及到是一个集合,因为呢,我们说一个类可以实现多个接口。
04:11
嗯,由于一个类呢可以实现多个接口,因此呢,需要以数组的形式保存多个接口的索引啊,表示接口,每个索引呢也是一个指向常量池中的,哎,Constant class就是你实现的接口嘛,这个接口呢,也得是常量池里边做了一个引用啊,都是用的这个结构是吧?那这里边儿呢,我们这个结构呢,它既能刻画一个class,也能刻画一个接口,那我们既然是实验的接口了,里边一定放的是接口而不是类了。这个应该很清楚是吧,一说大家就明白啊,然后呢,诶接口计数器,咱们刚才提到了,就是你到底又实现了几个接口啊,那这呢是一个U2,那咱们回过来一看,诶,咱们当前这个DEMO这个类呢,咱们没有让它去实现是不是任何接口吧,所以这里边儿呢,就是零零。这俩都是零零了啊,这个问题咱们在这呢也标识一下,它呢,就是一个,呃,其实它这块刻画呢,就是实现的接口的,哎,或者我们直接就要接口计数器是吧。
05:10
计数器,那由于呢,我们这里边儿是零零了,所以呢,咱们后面的话呢,就不涉及到,嗯,咱们下一个这个结构就是你这个接口的索引集合了。那大家呢,你可以自己下来呢,写一个代码,这个代码里边呢,你可以去设计一个类,这个类呢去实现,比如两个接口,那这个count这块呢,这个值就是二。那接下来的话呢,你就会有一个这个接口的一个索引的集合了,啊,这个集合的话呢,这个长度呢,就是二。长度就是二对吧,那在这个接口里边呢,它一定会对应我们这个constant class这里边这个结构了,那所以的话呢,这里边注意所以的话呢,我们是从这个大于等于零开始的,然后到这个小于interface count这个结束,就是这个范围呢,跟咱们说的那个数组的范围呢,是不是一样的呀。哎,是从零开始对吧,好这块呢,你找到几,然后就去前面去对应就可以了。
06:03
哎,这个大家注意一下啊,那接口这个索引索引第一个位置索引,那就是实现的第一个接口,第二个索引位置呢,就是你实现的第二接口,第一个跟第二个它是也也有严格顺序的,就是我们在写这个。呃,定义这个类的时候啊,源代码中定义类的时候,你先实现的谁,那么这个这个谁的这个索引呢,就放在前面啊,呃,相当于呢,我们这个索引为零的这个位置呢,是你源代码当中这个implements后边紧跟着的那个接口。啊,实现了这个简单说啊,就是这个类呢啊implements实现了接口B啊实现了接口C,然后这个B的话呢,就是你这个呃,角标索引零的位置,这个呢,就是所以一的位置是吧,哎,就这个概念啊。好,那由于我们这里边呢,没有实现任何的接口,所以呢,后续这个信息呢,就不再是我们当前这个结构里了,而是我们接下来哎,要给大家讲的下一个部分就是字段表集合的这个数据了,行,那关于我们当前这个类索引,负类索引接口索引集合在咱们的接lab当中,大家也可以在这个位置呢,能够看得到。
07:07
哎,包括这块是吧,这个星形呢,就在这儿,那在这个idea当中呢,那同样的道理,它俩其实是一样的,对吧?哎,这不就在这块吗。行,那这儿呢,我们就介绍到这儿,那接下来呢,我们再介绍呢,就是我们这里边儿又是一个相对来说比较重量级的啊,三块结构,字段表集合,方法表集合和属性表集合啊这三个介绍完以后,那我们整个呢,Class文件结构呢就告一段落,那整个呢,这前后这几块内容啊呃,包括的这个项先后顺序是什么,大家呢,稍微的记一记。稍微的记一记。
我来说两句