00:00
那下边这个零三的话呢,叫测试不同的类的加载器啊,那关于呢,我们如何获取,就是主动的获取这个类的加载器的话呢,这个在咱们讲上篇的时候呢,其实给大家呢,也提到过,比如说呢,我们通过你得到的一个具体的大的class的实例,说呢,你这个实例呢,是谁加载的呢,我们就调用一下叫get class load对吧?然后另外呢,我们还提到了去获取这个线程上下文的这个class。这个线程上下文的class so呢,咱们在下边儿讲到这个,呃,双性危害模型的时候呢,咱们还会提到它,那还会提到它这个默认情况下呢,这个上下文的这个类的加载器,它呢,就是一个系统类加载器。注意啊,它就是一个系统的加载器,那具体这个测试呢,我就不测了,咱们在上面呢也讲到过啊,比较简单,大家直接这样就调这个方法就行啊,然后下边呢,叫获取系统的类的加载器,那直接呢叫点get system class,那这个咱们刚才呢是不是也都用过对吧?行,这个呢,不是咱们主要要强调这个场景,那咱主要呢想给大家呢说明一个这样的问题啊,这呢我再去新建一个类啊。
01:07
哎,Class一行,那先简单的话呢,我们来说明一下这个,比如刚才提到了我们通过呢叫class。这个class,这个loader。第二我们get一个叫system class对吧,然后这个时候呢,我们得到的是一个系统的加载器,嗯,然后这块我们out enter一下。System class的啊,咱们可以打印一下。没问题是吧,那这呢叫APP class,就是我们所谓的叫系统类加载器,行,然后呢,它的这个负类加载器,第二我们叫get parent。那负类加一器,但是这个负类呢,咱们填到过,它不是说真正意义上继承关系的负类啊,然后我们这块呢,做个打印啊,这个叫parent呢,这个名不太好听啊,咱们呢是叫ext是吧,嗯,Class。有点像,然后把它呢,我们也做一个啊输出。
02:08
那这呢,就是我们这个执行的结果。OK,那这个应该也没问题,然后呢,当我们再通过这个那extension class的点它去get parent的话呢,按说呢,我们说该得到叫引导力代器了,对吧,那boot啊,Stripp。对吧,但事实上呢,我们知道这个打印结果的话呢,是不是应该是个no啊。那因为本身呢,这个引导类加载器呢,使用的是C和C加语言呢进行编写的,所以呢,也不可能对应咱们Java层面的一个对象嘛,哎,所以这里边呢,就输出的是一个闹是吧,哎,这个呢,我们注意是叫呃视图。啊,试图获取。那这个引导类加载器是吧,这个呢就失败了。这个呢,呃,咱们把这个呢稍微写一下啊,这个呢叫获取。
03:00
这个系统类还加载器。哎,获取扩展类加载器,好,这个呢,就是我们关于这个几类这个加载器的这样一个说明。然后的话呢,咱们也知道像核心的API,那比如说呢,我们像class.for name,咱们来一个java.la包下的string是吧?呃,这个呢,我们知道它的get class loader是不是显然呢,应该是作为呃用的这个引导类接来器啊,我们把当前的异常呢给它拆开试一下。好在这那咱们呢,得到一下这个class输出。那执行你看舌闹对吧,哎,没有问题,行,那如果说我们把这个切换成什么呢?哎,比如说我们当前的这个类啊,当前呢就是它呗,那当前这个类的话呢,我们在这块选择它的一个。
04:00
选全列名。啊粘过来行,那叫CLASS1,那自己定义的这个类呢,默认的话我们使用的就是系统内加压器,那其实呢,就是我们刚才得到的是不是就它呀。啊,就是这时候呢,就帮我们创建一个系统,为假期一个对象就可以了。啊,这个自定义的类,默认使用系统类。哎,加载七是吧,好,这个呢,就是我们比较熟悉的,这呢就不用多说了,然后呢,咱们想给大家说明的是一个什么问题呢,就是关于。哎,这个数组啊,这个类型的加载,哎,关于数组类型的加载,咱们在前面前面呢,其实也提到过,关于这个,呃,加载的这个结构的时候是数组的情况,这个场景,那数组类的话呢,首先我们。不把它呢,严格意义上就看成是一个类的这样一个结构啊,你比如说我们现在呢,创建了一个那string类型的一个数组,对吧,我叫ARHR啊,你有一个论啊,长度的是十,那虽然说我们现在呢,通过ARHR点咱们去你看也能get class对吧,那获取下它的这样的一个大的class的一个实例,那长的样子呢,大家应该也都比较熟悉,这里边呢,是不是一个。
05:15
这个数组的结构对吧,然后是一个营类型的L开头,然后是你这个具体的元素的类型加上一个分号结束,这个咱们在讲前面这个章节的时候,大家应该都比较熟悉啊,虽然呢,我们把这个数组也可以看成是一个大的class这个实例了啊,这不也能get class嘛,但是的话呢,并不是说我们Java虚拟机呢,就直接帮我们加载这样一个数组结构啊,没有这样一个数组结构类。而是怎么着呢,这个根据我们在运行期间那个需要啊,你需要呢,创建一个指定类型的数组,那我们先看你这个类型,主要呢,咱们是加载你这个类型,然后动态呢,在运行期呢,帮我们去创建你这个数组的结构。啊,只不过呢,相当于在堆空间当中,我们要是不是创建多个元素啊,这几个元素呢,要依次紧密排列啊,指定一个长度对吧?啊是这样子的,那我们也确实呢,可以像刚才呢,通过这叫get class,呃,这个get class了,你再去get class so,倒是也能得到这个加载器,那我们看一下关于这个词缀类型的数组的加载器啊,大家看看是谁。
06:16
好,但是这时候你会发现呢,这个结果是不是个not值啊。哎,这个结果是个nor对吧,这个nor纸所代表的意思是什么呢?就是说哎与数组中元素类型,那就是跟数组中元素的类型使用的类的加载器呢是一样的,那这个时候呢,我们看到结果是nu,那其实就意味着咱们这个死对类型的数组,它的类的加载器是不是就闹里加器啊。哎,这个就是表示使用的是引导类加载器啊,是这样个问题啊,那如果说咱们比如创建当前这个类。咱们自定义的这个类,它这个类型的一个数组,那我叫A21吧。长度呢,比如说也是十,那我们这块呢,做一个输出。
07:04
点get一个class.get class对吧,那这时候大家觉得呢。那是不是应该跟我们class的T1一样啊,哎,所以这块你发现打印的还是一个叫系统酶加载器。OK的没问题是吧,那跟我们这个具体的数组元素的这个类型啊,使用的类的加载器呢,是相同的。啊,这我们在这块说明一下啊,这个呃,数组。哎,或者这样直接说啊,使用的类的加载器,那与这个数组元素的类的加载器它相同啊好,那么接下来的话呢,我们看一下咱们数组的话呢,是不是就有int类型的数组,那这个类型的数组大家觉得它的加载器是谁呢?因为呢数组类啊,这种类型我们都可以去调方法,所以我们可以get class,第二再get一个class。啊,执行。
08:03
那出来结果了,好大家会发现呢,这时候这个结果呢,是不是个闹啊。那这个闹意味着什么呢?注意此时的这个闹呢,它可不是说表示使用的是引导类加压器了,这个时候nor呢,那我们是想说明就是数的这个基基本数据类型,它们是不需要加载的。啊,大家呢,还记不记得咱们在讲这个上篇的时候呢,其实提过这个事情啊,就是关于我们这个数据的加载,咱们说基本数据类型,虚拟机就预先定义了,那引导类型,引导引引用数据类型呢,我们才需要呢,使用这个类的一个加载。啊,所以说这时候呢,这个now表示呢,是不需要。这个类的加载器的意思,或者那叫没有类的加载器的意思。OK吧,行这呢,就我们想给大家稍微强调的这样的一个点,好这个呢,就看作是咱们对这个关于这个加载器这一块啊,我们想获取啊,想调用啊是吧,不管你是呃这个获取一下当前这个类它的加载器是谁,还是说呢,我们想拿到一个类的加载器,让它主动的去加载某一个结构,那我们相关的一个方法的一个测试啊,就是这样的情况。
我来说两句