温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
下边呢,咱们再说一个比较重要的一个问题,叫做类的初始化的一个情况啊,这呢,我们提到关于类的一个主动使用和被动使用的问题。啊,那这是什么意思啊,就是我们说呢,在对这个类呢,进行这个加载的时候呢,最后一个环节我们称为呢,叫做初始化环节,对吧?啊这呢,其实也是我们目前看到的是比较难的这样一个环节,呃,那初始化环节呢,我们涉及到呢一个方法叫做CL的方法的一个调用。那么这个方法的话呢,呃,这个如果是主动的被使用的话呢,我们这个方法呢,就会被调用,那如果一个类呢是被动的被使用,这个方法呢,就不会被调用。哎,大家注意听我刚才说的这个场景啊,这个主动使用的情况,我们这个C的方法呢,就会被调用,被动使用呢,就不会被调用了,那既然呢,你一个会调用,一个不会调用,那继而呢,就相当于展现出来咱们这个初始化阶段到底要不要做的问题。因为呢,我们初始化阶段做,其实就意味着呢,你这个CD这个方法的一个执行,那既然你主动使用呢,就意味着我们哎,就是会调用这个C应D这个方法,那其实呢,就表现为我们对类的一个主动使用啊,会去执行初始化阶段。
01:16
获取执行初始化阶段,那么被动使用呢,比如我们对一个类的被动使用什么意思啊?举个例子,比如说当访问一个静态的字段的时候,只有呢,真正声明这个字段类才会初始化,比如说呢,咱们通过子类呢,去访问父类中的一个静态变量,那这个时候呢,我们说并不会导致子类的一个初始化,这个呢,就是咱们说的其中一种被动使用。那言外之意呢,就是我们通过这个子类,咱们去调用父类中声明的那样一个静态的变量的时候呢,这个子类没有初始化,注意没有初始化不意味着咱们说这个子类没有加载。注意听啊,现在呢,咱们说的是没有初始化呢,是指它没有去执行这个initialization这样一个阶段,也就是说呢,没有去调用呃CR的这样一个方法,对吧,但是呢,由于你通过这个子类你去调了嘛,那这个子类呢,肯定还是需要加载的。
02:15
啊,所以这里边儿呢,大家首先明确一个问题啊,这个呢,也是咱们这一块的一个难点,也是咱们这一章的一个难点。这一章的话呢,咱们前面说到一个难点,就是关于我们用static final去修饰的这个字段呢,哎,到底哪些呢,是在准备环节赋值显示赋值的,哪些呢,是在咱们初始化环节赋值的,对吧?这个咱们已经彻底说清楚了,然后下一个难点呢,就是说我们主动使用一个类,咱们就会去调CR in,被动使用一个类的话呢,就不会去调用C2IN。那既然一个会去调,一个不会去调,那CR里边现在的代码呢,一个执行,一个不执行,那相应的这个结果呢,就会有所不同,对吧,那这个大家呢,先明确。那么我们关于这个类的主动使用啊,下边呢,我一共列举出来了有八种情况。
03:04
那我列举出来有八种情况,关于类的一个叫被动使用啊,就除了上面主动使用之外呢,大家都可以理解为呢,叫做被动使用,被动使用呢,是不会引起类的一个初始化,也就是说呢,不会去调用咱们的CR音节方法。不这样的一个方法啊,下边说呢,并不是在代码中出现的类,这个呃,并不是在代码中出现类,就一定会去被加载或者初始化。啊,这一定要注意,就比如说我们使用这个此类了,那你这块呢,这个此类就一定会初始化吗?这不一定啊,当然的话,我们这个类呢,通常都会是需要被加载的啊,这要注意,那如果不符合主动使用条件呢,我们这个类呢就不会被初始化,那首先呢,大家先把这里边儿,咱们说这个主动使用和被动使用,它到底影响的是什么,先明确一下。然后下边呢,咱们来看一下具体的这个主动使用啊,这里边儿这个八种情况,咱们呢,诶包括呢,下边这个被动使用这几种情况,咱们一一呢,给大家做一个验证。
我来说两句