00:00
嗯,下一个叫class loader了解啊了解啊,所以这块呢就不用去深究了,首先涉及到类的一个加载过程,这个呢也是一个了解,咱们其实第一天呢加代码就涉及到类的加载了,那Java c以后生成自解码文件,再接着呢通过java.exe这时候呢就要加载了,那具体来讲内的加载呢,分成这样的三步。啊分成这样三步,然后具体每一步里边呢操作,哎在这我有写,哎大家呢也是了解一下就可以啊哎分成加载链接和初始化,哎范范呢,把它们三个一起呢,也叫做类的加载拉机式啊行这就过了,然后下边呢,我们提到一个类的加载器啊这里主要呢,是因为我们这个类编运行呢有一个流程。哎,咱们这呢,这不用到这样一个流程,诶这呢,我把这个流程呢,就先放在这儿啊,在这个流程当中,我们看到自检码文件呢,是物理上的一个文件,要想能够加载到内存中,我们需要用类的叫装载器或者叫加载器啊,那这个加载器的话呢,它的主要作用啊,那很明显了,就是负责把我们这个类是吧,直接把文件呢给它加载到内存里的。
01:10
啊,所以CTRLC就是这样的一段描述啊,行,这就它了,然后呢,类的加载器的一个分类啊,哎,包括这个类的一个缓存,这样吧,我把这两个呢就都拿过来了。来CTRLV一下啊好,下一个呢,关于这类的加载器的一个分类这块呢,大家也是一个了解,那我们知道呢啊,它分成这样的一些加载器,那尤其需要关注的就是诶我们这呢,像这个Java的核心类库,就是我们API里边提到这样的一些类库,它呢是通过我们这个叫引导类加载器来去加载的,那像我们自定义的类啊。自定义类是不是都是它呀,诶系统类加载器帮我们加载的,这个大家呢,也可以去自定义加载器啊,这呢我们就不去讲这个事儿了,行,嗯,这个我们给它复制一下啊。
02:06
哎,你像你要自定义加载器,是不是也是呃,去继承咱们现有的这个加载器的这个体系结构啊。就像咱们说的异常一样,说你可以自定义异常,那怎么叫你这个定义的类就是个异常类呢?你得CE咱们异常的这个体系中的某一个类,那你就是个异常类了啊,那你要是能够自定一个类的加载器,你也得去继承于我们现有的哎,这个类的加载器中的某一个结构,那就可以了啊,就是这个套路啊,那再往下说,使用class loader加载FCSRC目录下的配置文件,这个咱们考试考的这个事儿,那这个呢,落地需要大家稍微关注一下啊,写到这儿了。那就是这个里边的啊,诶CTRL,嗯,这里边咱们这个写的是,那我把这个打开吧,把上面这个呢,给大家稍微注释一下,哎,就是这样一个方式啊,就是这两种方式呢,大家这个后边开发的时候呢,你用哪个都行。
03:04
哎,用哪个都可以啊,关键的就是你得记住一个。啊,你两个都记住那更好,嗯,怎么着你也得记住一个啊,这里边我们提到就是通过这个class load呢,也可以做这个事儿,诶主要呢,就是因为他有这样的一个方法啊。行,那这个调的时候呢,一定要小心,我们这个配置文件呢,它的默认位置是在对在src下,那这呢,咱们是用这个idea来说的,Idea呢,咱们这是一个module啊,你要eclipse的话呢。就是一个对project的一个工程就行啊好过了,那再下边关于反射的具体应用啊,这里边我们提到了三个事儿啊,一会呢,我们讲这个四啊,这三个事儿里边第一个跟第三个呢,是需要大家掌握的,首先啊,第一个说创建运行实例的对象啊,就是咱们刚才考试考的这个问题。对,嗯,核心的话呢,其实就是这几行代码啊,CTRLC一下这个粘过来,嗯,那这块呢,就不写到这了,诶嗯,这个把这个说明CTRLX咱们都放在这了。
04:12
这样的啊。行,那核心的话呢,这个方法就是它。诶,CTRLS一下啊好这呢就不多说了啊,咱们考试的时候也提到了一个点了,那再往后我们通过反射呢,可以获取运行室类的完整结构啊,完整结构这块呢,其实对大家要求呢不是太高,呃,一般呢,咱们在开挖里边呢,也没有说非得要把它完整的这个这个里边的所有的方法,所有的属性啊,这个所有的构造器啊等等等全都拿到啊,一般呢,这样的需求非常少哈,哎,但是呢,我们给大家演示这个目的呢,就是让你知道反射呢能做这个事儿,那回头呢,自己讲的时候说反射我们可以做什么事儿,这时候呢,诶你你确实代码时候也见过,甚至说自己也写过,这时候你说出来就比较有底气啊,要是光说说能做,你自己也没写过这个呢,多少感觉有点虚是吧,诶这块呢,就是你可以不用写啊,但是你既然我写了,你知道他确实可以做啊,那关于这个属性啊,这呢,咱们是写了一个例子,给咱们粘几个例子就行啊。
05:18
这是获取这个属性结构的,那获取方法的。啊在这儿,然后关于具体这个方法或者属性里边的具体某一个这个这个像法规类型啊,权修饰图啊,呃,这个咱们也都讲了,这个大家呢也知道,反正呢确实可以做啊就行,下来呢就用不着再去写这个代码了,嗯,然后关于其他的一些结构,这呢,咱们又零零散散写了这个不少啊。啊,这么多。哎,CTRLC,诶这个就直接哎放到后边就行啊,诶你知道呢,这个反射呢,确实可以做这些事儿,但并不是说呢,大家后边说了解,你说肯定就不会出现,这不一定啊,比如咱们会出现的这个点呢,也稍微提过,比如说你这个嗯类实现的接口,咱们呢,一会讲这个动态代理,哎,就会用到这个事儿,这是一个哈,然后另外呢,关于获取运行实类的负类的泛型,哎这个呢,咱们后边讲代码当中也会涉及到,就是这个在外部阶段我们做功能的时候也会见到这个事。
06:18
啊,就是不是说呢,这个呃,完全见不到哈,只是说呢,大家可能见的频率呢,稍微偏低一些,仅此而已啊好,然后呢,关于这个应用三反射呢,可以去调用对应的运行实例中的指定的一个结构,典型的就是属性方法构造器。当然这三个里边呢,最多的还是方法,那本身这个属性啊,你私有了咱们不也可以改善的嘛啊,所以呢,还是有体现为方法,而构造器呢,一般呢,咱们也很少去调一个特殊的这个类的构造器啊,一般要调呢,也还都是第一种方式啊,调它这个空舱的构造器啊,这种是占绝大多数的情况啊,嗯,所以这块呢,我们主要关注的其实还是中间的这个事儿啊,但是呢,这个事儿,嗯,这个能做,其他的事儿呢,其实它也可以做啊,整体来讲,调指定结构这个事儿是我们用的反射最多的地方啊,当然它的前提呢,你得先有运势猎的对象。
07:15
啊,因为对应的这些属性方法构造器啊,尤其属性方法啊,通常都是非静态的了啊,你要非静态想让它调用执行,那一定得先有对象,所以呢,这个应用三通常都是先得基于应用一啊才有,那在这个里边调用指定的属性方法构造器,哎,这个呢是需要大家掌握的,首先关于这个属性属性的话呢,咱们就直接说这个通用的了啊,这里边儿就是这个事。诶,CTRLC。哎,这是关于调了一个属性的啊,然后调方法啊,其实它这个步骤非常规范啊,一二啊,这个是写成个三了啊。那CTRLC这个,然后关于第二这个多导器。
08:05
哎,这样就完事啊,这呢我们提到都是三步。啊,都是这个三步,以这个方法为例哈,你得先获取到这个方法,属性呢就得先获取到属性,构造器呢,得获取先获取到构造器,然后调用方法这块呢,叫evoke,哎哎,不对,这是第三步了啊,哎,第二步呢,就是set accessible,哎,这个呢,主要是为了防止你这个权限不够啊,我们得保证能够访问,需要加上它,呃,那你要本身呢,是可以访问的,像public的这个你加上呢,也没事,诶所以这个呢,作为通用的一个方法来讲啊,都要加上,接着呢,你再去调invoke就可以了啊,需要大家注意的呢,就是像这种静态的方法。哎,静态方法呢,我们再调用就没有必要呢,大家再去造一个运行实类的对象了啊,咱们都知道啊,那静态结构呢,直接用类调就OK,所以呢,大家可以写上这个类,那另外来讲呢,你这个类本身这个class它就已经已经代表了,那就没有必要非得说是这个类里了啊这个之所以你写是咱们以前比如你想调一个收方法,这个收方法呢,是个静态的。
09:16
因为呢,我可能这个person里边有这个兽,这个这个比如说动物animal里边也有这个兽,我不知道你想造掉哪个兽,所以你得拿类点一下啊,知道了,你是这个类里边这个受,那现在的话呢,我们想调这个方法,这个方法的话呢,从哪来的这个方法,这不就是通过这个class来的吗?那这个class的话呢,我这都已经知道你就是person了,其实呢,是不是没有必要在这再去写这个person了,对吧?嗯,你像你这写的person,比如说动物也有,你这写个animal调class,它也不会去让你调animal的,那还是调我们这个,呃,谁啊,就是你这个方法是我们class的,还是调到class里边的这个,所以还是person IG呢,就这个参数完全没有必要写。
10:01
啊,但是因为人家这个方法呢,这个参数你又不可能不写,声明的参数上你能不写啊,所以我们就写个no就完事,其实呢,根本就不考虑它的一个,就是我们在这个方法体里边啊,其实根本就你要是个静态方法,根本就没有用它,其实啊行,你知道这个原理是啥,那调用过道器啊完事了,行,那这呢落地需要大家关注的这个点啊,我们在这儿红色的都已经标识的很清楚了,对应的这个代码落地的需要大家掌握啊,考试的时候呢,涉及到的写的不好的,下来一定要把这个红色的对应的代码要会写啊。
我来说两句