温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
常量池啊,咱们刚才说其中有两个部分啊,一个呢叫常量池计数器,一个呢叫常量池表,那我们就先来看一下,叫常量池计数器,常量池计数器啊,主要目的呢,就是来记录我们长远池表中到底有多少个项。啊啊,这边也指明了说,因为常量池这个表中这个项啊是不固定的,呃时长时短,呃咱们这个资金码文件中又没有分隔符,所以我们必须呢放置两个字节呢来表示这个常量值,呃这个的容量是多少对吧?呃这呢是很明确的一个概念,但是呢,它跟我们讲的数组的长度呢,其实是有区别的啊,比如我们定了一个数组啊举个例子啊,嗯,我在下边这个写一个。哎,我比如说一个in特形的一个数组,哎,这个你有一个in特形数组长度呢,比如是十,那很清楚的,我们知道此时的,哎,我们这个长度呢,就是十,但是这个长度是十跟我们这里边这个常量池计数器啊,比如说我们常量池表中一共有十项,那我们常量池计数器是不是就是十啊,注意不是。哎,常量计数器呢,比我们那个常量池表中的个数啊,多一个一。
01:03
哎,多一个一,也就是说如果我们constant pro count是一,就是常量池计数器的这个值是一,实际上我们常量池表里边啊,是没有常量项的。哎,它俩有一个差,差距一的一个关系啊,这要注意啊,那比如说呢,就咱们看一下,嗯,咱们写的这个DEMO对吧。这个DEMO里边呢,哎,就这一项吧,这一项我们也换一个颜色,比如用这个颜色,它呢,就相当于哎,常量池计数器嘛。哎,计数器对吧,那此时这个常量池计数器呢,你需要注意的就是它用的还是16进制啊嗯,那这个16咱们来这块看一眼。这个16对应的叫22,那沿IG呢,就是我们常量池计数器呢,此时记住这个值呢是22啊,就十进制的22,那我们这个常量池表中。啊,一共有多少项呢?啊,那应该是有21项,就是有一个减一的关系啊,那么21项的索引范围是多少呢?索引范围呢是从一到21。
02:06
哎,从一到21这一点呢,倒是跟我们这块呢,是有点像啊,就好比是我们数组的首元素呢,咱们说是这个角标零是吧?哎,最后一个位置呢,是呃,这个十减一的这样一个角标位置,那然后第二个元素呢,我们叫AR1这样是吧,那现在说的概念就是说,诶,它的这个有效范围是这个区间,那第一个位置呢,是空的。那为什么是空的呢?啊,这里边呢,有一个解释啊,这个大家关注一下啊,就是通常呢,我们写代码的时候呢,都是从零开始的啊,这个大家都应该清楚是吧?哎,当然还举过一个例子啊,就是说呃,张阿成缘啊,这个家里边生了孩子了,平时呢都是媳妇带是吧,然后呢,媳妇教孩子数数呢,都是1234啊突然说这个成员呢,有一次带着媳妇孩子去吃饭啊,说问这个桌子上几个菜啊,孩子呢,就是哎1234啊,这个成员呢,一巴掌拍过去说应该是零啊,1234是吧?啊也就是说我们写程序的时候呢,都是通常从零开始的啊,但是呢,咱们的这个常量池啊,确实从一开始的,把这个零的这个位置啊,咱们给空出来了。
03:06
哎,目的是什么呢?就是因为呢,我们,哎后边呢,会讲到像属性啊,哎就是attribute是吧,属性方法字段,哎他们都会引入咱们常量池中相应的一些索引,那么在引用的时候呢,如果说诶有一些特殊场景下的这个数据,它就不想引用任何一个常量池的项目啊,你要是任何都不引用的话呢,我们就用一个索引值零来表示啊,也相当于是一个特殊情况的占用。啊,所以这块呢,明确一下我们的一个索引范围啊,这个事儿大家一定要明确下来。所以呢,我们在这里边看到呢,就是常量值表中的这个项数呢,是哎,Constant pro count减一啊,这个一定不要丢了,后续这些呢,都没有减一的操作。好,先明确我们这个,哎,常量池计数器啊。
我来说两句