00:00
那接着啊,咱们来说这个链接阶段的preparation叫准备的这个环节,那大家呢,也是记住我们这个准备环节主要做这个事情是什么,干什么事呢?就是为咱们类中的静态变量呢,分配内存给它呢,附默认初始化值。给它默认初始化值,那这个大家注意,那这里边呢,咱们重点强调叫静态变量啊,这个静态,因为咱们说一直到这个初始化这块。一直到初始化这块呢,咱们上边这块是不是涉及到的都是类的一个初始化对吧?类的初始化呢,我们涉及到的这个结构呢,就是涉及到这个静态相关的结构,这时候还不涉及到非静态的这些变量,诶非静态这个变量呢,只能说咱们在一开始的这个加载环节,咱们呢,会把它是不是也是加载到咱们这个,呃,方法区的叫类模板对象当中,说说叫类模板数据当中,对吧?但是这时候呢,我们真正的去初始化你这个非静态的这个变量还没有开始。
01:00
那这个大家一定要先关注这个事儿,那什么时候开始呢?当我们有了这个类的加载之后,咱们下边是不是要使用这个类啊。使用这个类的时候呢,咱们典型这个场景呢,就是创建这个类的对象,这个时候呢,咱们才会把当前你这个类中的这个实例变量呢,进行一个加载啊,实例变量进行加载,所以这呢,咱们首先明确咱们这个准备环节呢,指的都是静态的变,静态的变量啊,静态变量行,那么具体这个呃,负的这个默认值是多少,这个呢,想必所有做Java开发的同学呢,应该都是比较熟悉的,咱们在这个Java代码层面呢,也需要大家去记这几个事儿,对吧,像BAT short int long,这都是零,当然具体类型呢,我们说这个,这是你声明的这个类型,然后flow的话呢,叫0.0FW 0.0叉呢是杠U0000啊,就是我们用英尼扣来表示呢,就是最初的那个零。然后呢,这个bird类型是false。哎,这个大家应该也清楚,这个false呢,咱们说在这个资金码的角度来讲,其实这个false呢,对应的就是那个零对吧,然后处的话呢,咱们对应的是一,那既然我们int类型它呢默认出始化值是零,那自然而然我们这个波类型这块呢,它的默认出始化值,那也是这个false,那就合情合理了,那引用数据类型呢,默认值呢,都是个no啊,这块不用多说,大家应该都比较熟悉,包括不同的类型呢,它的我们说这个咱们讲的就是Java这个语法层面,他们占的字节数也都不一样,这个呢就不多在这啰嗦了。
02:27
咱们主要呢,来看一下下边这几个注意点,第一个非常重要的说,这里呢,不包括基本数据类型,字段用词在这个翻译中来修饰的情况。嗯,因为呢,Final这个在编译的时候呢,就被分配了准备金会显示赋值,那这个大家你看理解一下。理解一下,咱们现在呢,说明了一个点,说呢,此时主要涉及到是静态变量,然后我们再关注一个词呢,这个叫变,对吧,是变量不能是常量,那如果说静态之余,我们还用那个fun用来修饰,那表示它就是一个常量了,这个常量的话呢,我们说在编译的时候,咱们这个常量的这个值是起,它就已经会在这个常量池当中帮我们提供一个对应的那个,呃,算是个自变量了,然后我们在这个准备环节的话呢,就会给他做一个显示的赋值。
03:16
就会给他把这个值呢附上了就已经。啊,这个大家呢,去体会一下啊,去体会一下,那咱们这块呢,来给大家举这个具体的例子啊,我们来看这个题目啊,这个题目非常简单,就这样三个三个量对吧,三个字段,那咱们呢,呃,这个权限修饰符其实没关系,主要呢,我们看一下后边这块,首先明确我们都是static的,非static的话呢,不是不在我们这个现在这个讨论的范围之内,对吧?那是你这个类的使用环节实例化之后才会有的问题,所以呢,先明确这都是静态的,那其次的话呢,我们下边这两个我加了final,当然我把这个呢先注释一下,咱们重点呢,先看上面这两个。这两个的话呢,你看一个加final的,一个没有加final,我把当前这个程序呢,做一个compel编译。
04:01
编译之后呢,我们来这块查看一下它这个结构,来咱们看这个属性这块。属性那块呢,大家打开之后呢,发现有俩属性,一个叫ID,一个叫number,那区别的话呢,就是下边这个加了一个final修饰,你看我们在这个number这块呢,有个监框尖,你往这一打开,咱们在前面第一章讲这个资金码的时候呢,提到过这个叫constant value这样的一个属性。提到过两个属性,但是你往前翻你就知道,咱们讲属性表集合的时候呢,提到过这个constant value6,它呢,就是来记录咱们当前这个这个全局常量,它负的这个值,但是你看我们这里边儿这个值的话呢,是不是?这个一对吧,这个值是一,把这个一呢,我们就已经在编以后的词间码文件中就做了一个保存,对应的是咱们在这个常量池这个九的这个位置,那这个数值呢,就是一。所以说呢,你看对应的就是我们这里边提到的,在编译的时候呢,我们就已经把这个数据呢,做了一个分配啊,在这个常量池当中,就是咱们这个自解码文件中是有保存有展示的。
05:04
那行,那咱们知道呢,Final修饰呢,表示就是常量,言外之意呢,就是你这个值一旦被赋值了就不能修改了,所以说所以说啊,咱们现在叫解析环节是吧。解析环节咱们说呢,去赋一个值,比如说像我们这个long负个值是啥,是多少呢?我们说是零,那你后期的话呢,是不是还可以把零改成一啊,改成二啊,改成三呀,因为你是变量,所以可以随时改,那我们这个final修饰的,你就不能说现在在准备环节先整个零。后期的话呢,你在初始化的时候呢,再给我改成E,那能改那那就不叫常量了吧,对吧,就不合适了,所以说呢,哎,趁着你这些这个全局变量在赋值为默认初始化值的时候呢,你呢,把我这个常量呢,你就给我直接一步到位就附上这个值就完了,哎这呢就是咱们强调这个点啊,就是非final啊修饰的这个静态。
06:02
变量啊,非final修饰的静态变量,哎,当然这块咱们这个还得还得明确一下,这个后边我们还得讲初始化,这个咱说的严密一点啊,就是先对于这个基本数据类型。基本。哎,数据这个类型来说,我们说这个非final。哎,这个修饰的这个变量。啊,在解析环节啊,这个给在解析环节呢,进行默认初始化赋值。啊复制,那么还是针对于这个基本数据类型变量,我们说这个final修饰以后啊,那在解析环节。环节,嗯,环节。嗯,直接啊进行显示复值,当然这个显示复制呢,我们一方面呢,像这样你写一个复值为一,或者你用这个键子代码块是不是也可以复制啊,那这个我就显示赋了个值,那这个一的话呢,咱们就会在这个位置,那直接呢看到啊已经被复制为这个一了。
07:10
那已经已经被复制这一了,那主要呢,是避免什么呢?你要是在这块呢,还进行一个默认赋值,然后后期呢,在初始化环节呢,再给它赋一个一,那不那那都那都常量哪能付两次啊对吧,那行,这就我们说的这个场景。然后下边呢,你看我这块还写了一个字串啊,还写了一个字串啊,把这个程序呢,我们再去做一个re compel。然后呢,我们这块回过来做一个刷新,好大家看现在呢,我们这个针对的是引用数据类型,当然这个类型很特别,就是string,我们右边这块呢,咱们不是new啊,我是通过一个字面量的方式写的,这个时候大家也会发现呢,在咱们这个字号这块,诶,它也有一个是不是constant value,那它对应的话,我们这呢,是常量池里边的一个12的位置。把这个12呢,你打开看,这不就你这个叫cost这样的一个字串信息吗?那跟咱们上边这两个去对比的话,你发现是不是跟我们这个number是一样的呀。
08:07
对吧,一样的这个场景,所以说呢,对于咱们,呃,这个你要再拓展点来讲,那就是这个string啊,就是如果。哎,如果使用这个字面料。的方式啊,定义一个字符串的话啊,字符串的这个常量的话啊,这个也是,哎,在这个解析环节直接呢进行显示复制。嗯,这个大家注意一下这个场景,你看我这块呢,尤其强调是使用字面料的一个方式,也就是说你不能这样,比如我这个叫叫cost,嗯,这个HR1,然后这块呢,你看我是这样写的new,一个string,我这块呢,通过new的这个方式呢,去造个对象,那咱们把它呢,我再做一个编译,这块是一个难点啊,这个大家注意看。
09:00
我现在做完一个编译了之后,咱们这块呢,再做一个刷新,那很显然你看这块呢,就四个属性,但是呢,你看我们下边这个属性它呢,是不是就没有跟这个number或者这个这个上面这个字串一样,它有一个constant constant value了,对吧?所以说呢,就是我们不是在这块呢,诶给它直接复制的,虽然说你这块也加了个finalel,但是不是在这块做的,那不是在这块做,在哪做呢?那咱们下边讲这个,嗯,这个初始化的时候会提到叫C的这样的一个结构,在这个结构里边,你看我们会做这个赋值,咱负了一个值是不是在这儿呢。哎,这个cost h1是吧,在这负的值这个值,那这个c in这个咱们在讲上面呢,也稍微提到过,它呢,是针对于咱们下边要提的这个初始化的一个阶段。才会涉及到这个具体的一个方法,哎,因为这里边涉及到代码的执行了,是吧?哎这样的场景,那所以你看这块我主要强调的就是使用自变量的方式来定义的话呢,哎,它呢是显示复制的,那这个暂时我先注入掉,咱们下边呢,在讲到这个初始化环节的时候呢,还会说啊,还会说哎,我这里边加了一句话,这一句话呢,大家现在先体会一下,我们讲到这的时候呢,你的理解会更深刻一些,什么呀,就是在这个解析环节啊,咱们不会像初始化这个环节一样呢,会有相应的一些代码的执行。
10:20
那你就比如说我们这个C21内的这个方法,它就属于一个具体代码执行了,对吧,那我们在解析环节呢,没有具体代码执行就是啊,复一个默认值,复认默认值,那你要长那个select这个final的这个常量呢,像基本数也行,或者字符串使用自变量的方式来定义呢,那你就直接给我附上值就完了。啊,没有其他这个代码的执行啊,这个大家注意一下这个点好,嗯,这块稍微有点难,咱们在下边讲这个初始化的时候呢,还会来说。哎,先把这个事儿呢,先记住它这呢,就是咱们说的这叫准备阶段。啊,准备几段。好,这里呢,咱们更正一个小问题啊,现在咱们讲的是这个准备环节对吧?哎,刚才这个一顺口说成这个解析环节了,这个解析环节是不对的,这是咱们下一个呢要讲的这个叫解析,对吧?现在呢,咱们谈的是准备。
11:09
解决环节主要做的是什么呢?这个咱们下边呢展开来给大家讲。
我来说两句