00:00
行,那刚才呢,咱们看的是反编译以后的这个这个这个文件啊中的一个信息,这个信息的话呢,咱们都会这个加载到方法区当中,好,那在这个之后呢,咱们再说明一个信息。哎,这呢,再强调一个点谁啊,就关于这个叫no final final呢,我们衡量的是不是一个常量的问题,对吧?那类变量,类变量我们是衡量的叫static这两个关键字呢,其实是不矛盾的,咱们现在呢,强调一下叫non final的这个类变量啊,你看这块说明说下这个静态变量跟这个类啊是关联在一起的,随着类的加载而加载,这个咱们大家学这个呃,Java语言的时候呢,应该都很清楚啊呃,使它呢,能够成为类数据在逻辑上的一个部分啊,随着类的加载而加载是吧?类变量能够被类的所有实例呢所共享,即使没有类实例的时候呢,你也可以访问它。毫无疑问是对的,对吧,行,然后呢,大家你看我这呢,写这个代码。
01:01
哎,这个咱们不能看那个资金码文件了啊。把这个收起来看上边。嗯,看这个是吧。啊,这个再打开一看行看这个这呢是咱们写的一个测试类,然后呢,下边是我写的一个order,写一个order OK,然后大家看看这个代码的话,我们要执行会不会抛这个异常啊,我这呢是把这个order呢声明称是个no啊它这个对象呢,说明是个,然后通过这个no呢来调hello,然后呢来去调这个count,注意此时的hello跟count呢,在我们这个orderly当中啊,它都是静态的结构,这是count,这是hello,都是静态的情况下呢,我们这个,诶如果呢,这个对象的引用呢是一个no,此时呢,我们要执行会不会出现控制人异常呢。他也想想会出现吗?啊,按照我们刚才这个说法呢,即使没有类的实例也可以访问它,是不是说就不会出现啊跑一下。
02:00
啊,确实没有出现是吧,诶只不过呢,大家可能平时很少写这样的代码啊,就是你这块呢,你有个对象,你拗不拗这块呢,照样是都能访问的。啊,这样就能访问,OK,呃,咱们要说的还不是这个事儿啊,咱们想强调的是下边这样的一个问题,就是说呢叫全局常量,嗯,这里全局常量呢,就是咱们指的呢,既用这个static修饰,又用这个final修饰啊,或者咱们称为呢,是用final修饰的一个static,因为咱们现在说的这个是常量,就是随着类的加载加载,只不过呢,它又用final来修饰了,那这块写的啊,被声明为final的这个类变呢,它的处理方式就不同了,每个全局常量呢,在编译的时候呢,就被分配了,这个是什么意思呢?这个是什么意思呢?大家来看这样的一个说明,我现在把咱们这个代码啊,先进行一个啊,这个我就不用再去编译了,因为咱们刚才都运行过是吧?行,那么咱们找到这个第九章。
03:00
诶找到咱们这个Java目录,然后找到这个order这块,然后我,诶就就在这就行啊,咱们是open in terminal好在这咱们把这个order这个类啊进行一个哎反编译,哎扎P-V-P,然后呢,这个叫哎method。Area test.class然后我们把它写入到咱叫test1.txt吧。好回撤一下行,那此时呢,咱们得到了一个T1啊,把它CTRLC。诶,我呢放到桌面上好,我这上双击打开,还是呢,用咱们这个ID plus打开的,打开以后呢,我们想带着大家看一下这个事儿,咱们此时呢,这个order当中有两个静态的这个属性啊,或者咱们叫域是吧,然后一个呢是final,一个是非final的行,然后呢,咱们来看一下这个自解码文件啊,找一下咱们的这两个属性。
04:01
看啊,在下边儿。这呢是这个构造器,诶我这看的对吧,是咱们这个order order。诶,我这看错了是吧,麦啊这整错了啊,懵了,咱们现在呢,是不是想这个反边orderly是吧,这整差了啊,诶那这块我们把它呢就删掉了。我咋说不对呢?呃,这块呢,我们选这个选谁这无所谓,主要呢是这个terminal打开呢,我们这个自建文件,它所在的这个文件夹,然后呢,我们使用这个就杠P是吧,杠V-P。Order啊,点class写入到T一点。哎,TXT中。好,然后把它那CTRLC。把另一台先关掉。好,这时候呢打开,诶,此时呢,咱们想看的是这个order类啊,那这个类呢,它是有这个属性的。
05:06
诶,这是呢,它的一个属性,这是它的另外一个属性,大家看到这两个是不是有区别,关于我们这个抗的话,它是一个静态的。然后这个位置呢,它是一个类型public static,对于我们这个number的话啊,你看对于我们这个number的话呢,这个值呢,你看我附了一个一,这个值呢负了一个二,但是呢,你会发现呢,我们这个二呢,在生命为final的这个static这个属性当中,它这块呢,写了这个值呢是二,而我们在这呢就没有写。啊,那这个想说明的问题呢,就是说我们对于生命为final的这个啊,Static这个变量啊,Sta这不能叫变量啊,这个常量的话呢,实际上在编的时候呢,咱们就把这个值呢给写进去了,而对于我们像这种呢,只是生命成带这个没有生命成没有加这个final的咱们呢,再进行,呃,前面讲这个内带加载器加载的时候呢,呃,有一个那个准备环节是吧。来看这个啊,我们这是不是有个prepare叫准备环节,在这个准备环节的时候呢,咱们仅仅是对就是讲这个prepare的时候呢,我们说会对这个静态的这个属性是不是进行一个默认初始化,诶默认初始化像它呢,就是赋值是个零,然后呢,再在我们这个叫诶initialization的时候呢,咱们给它复制是个一是吧,那在咱们这个问题当中呢,这个。
06:24
像这种final的这个啊,这种这个属性啊,它呢直接呢,在我们准备阶段,或者其实他在编译的时候啊,在编译的时候呢,就给它附上值12了。那这要注意有一个区别,那嗯,咱们这个里边呢,呃,关于咱们这个静态的结构,你看这块呢,是不是还有一个叫C是吧。哎,这个还记不记得,咱们前面讲这个呃类的加载过程的时候呢,说如果你要是有这个静态的属性进行过显示赋值,或者呢,但静态代码库中赋值对应的是有一个叫CR的这样的一个类构造器方法,那实际上就实际上呢,就我们这个结构嘛,对吧?诶给我们这个count赋值是个一对吧。
07:07
OK啊,这个呢是我们回顾的一个内容,行,嗯,这呢是我们说这个主要呢,咱们现在加载的时候呢,这块考虑的是这个non还final是吧,Non final的这样一个情况,行,那咱们呢,就通过这个,其实上只是通过这个自解码文件,咱们能够看到呢,咱们要把这个信息呢,都加载到这个方法区当中啊,那咱们往回推呢,就直接把文件里面呢,就看到了相应的这些结构啊是这个意思,行这呢我把它关了,诶我把咱们对应的诶这两个文件啊,CTRLC一下,诶我可以放到咱们这个。上边。啊,我就放到咱们这个下边啊,OK行,那这个呢,咱们就说到这儿,哎下面呢,咱们给大家讲讲谁啊,讲这个运行时常量池啊,运行时常量池咱们在这呢,是不是能看到这个叫呃当前这个类,然后们呢,咱用这个叫Jack lab,能看到整整个呢,是我们更高级的一个翻译,在这里边其实最复杂的一个结构呢,就是叫常量池,哎常量池里边这个信息量是非常大,哎我们呢,下一节把这个事儿呢给大家讲一讲。
我来说两句