00:00
行,那这呢是我们反射之前对这个破ER呢per呢能做的事儿,那接下来呢,我们看一下有了反射以后,我们呢,能不能做一些同样的事儿,甚至呢,还可不可以做一些不同的事儿。行,那我们来看一下啊,现在有了反射以后。首先我们先看一下,上边呢,咱们是造了一个类的对象,调了一下这个person类对象的属性和方法,当然这呢也是调不到器了,首先这个事儿我们先看看用反射可不可以同样的来做,比如说一开始你造了一个,哎,通过这个两个参数的构造器造了一个pon类的对象,我们呢也做这个事儿,我们是通过反射来做的,哎,通过反射来做,首先呢,我们拿这个person类本身,哎,它有一个属性叫做点class。你看这个迪奥class属性,它其实就作为咱们大的class的一个实例了,不妨我这个叫class了啊,你要写俩小S成那个关键字了,哎,我这写成class了,哎,这样啊,那你换个别的名也一样,这个变量名你想怎么叫都可以,其实啊,那这个呢,咱们以前也并不是没有写过。
01:14
在咱们讲这个线程同步的时候,关于静态方法说它的这个同步监视器是不是就它呀,对啊,当然咱们说过啊,说后边反射的时候呢,咱们呃会具体的来说一下这个问题啊,因为咱们说了同步监视器你是一个对象,那从这个形式上来看呢,它是谁的对象呢?是不是这个类的一个对象了,哎是这样子的啊一会呢,咱们来说一下关于class类的一个理解啊行,这呢我写完了,写完以后呢,我们通过这个class,哎,做什么事呢?我们可以去get它的一个,哎指定的叫constructor,叫构造器啊,这个构造器呢,第一个参数是string类型,第二个参数呢是int类型,所以我这就可以写个string.class哎,后边是个int类型啊int.class哎这样来写的。
02:04
哎,这个大家肯定还看不懂,这呢,我们就是先让大家去体会一下反射,这里边具体的API呢,咱们接下来才会展开来讲啊,那这样的话呢,我们就得到一个具体的叫constructor了,哎,这个我们就要哎死吧,Constructor得到这样的一个指定的构造器啊,哎,这个异常呢,暂时我们都先去给他Rose,那他其实就可能没有找到这样的一个构造器,找到这个构造器以后,我们接下来呢,通过这个构造器我们可以去给他造对象,造对象咱们也叫汤姆,这个年龄呢,也是12岁,诶跟上面这个完全一样啊,那行,这个呢也会抛一场,我们也给他抛出去,那这个执行完以后,我们就会造一个对象,这个对象呢就是一个object类型,当然了,咱们知道这个此时的构造器其实掉的就是我们这个,它对应的是person类的啊,所以这呢,你可以做一个强转,其实啊。
03:00
也就是说你要我我不想转,不想转这块呢,你也可以先呢去c out一下obj,相当于呢去调它的twoth string方法,这个twoth string,你看看这个调的是谁的twoth string,也能知道这个对象到底是谁。对,你看调的还是我们person类的这个储存,相当于这OB呢,其实本质上它就是一个哎person啊,这不只是下,相当于你把它付给object了,是个多态的形式,真正调方法的时候呢,就是我们多天讲过虚拟方法调用嘛,啊就回来了,所以这块呢,你想做一个强转,就是明确呢,看到我们这个OB接呢,就是一个person也是可以的。那这呢,我们就叫这个P的这个图了,好,那通过刚才这样的几步,我们做了跟上边一样的事,就是造了一个person类的对象,使用的构造器都一样,都一样啊,相当于是我们在我我我在这儿把这个呢说一下啊,我在我在这写一下啊,做的第一个事儿,通过反射啊,咱们可以去创建这个叫person类的对象。
04:02
通过反射做的啊,然后第二个问题,那么之前呢,你有了对象以后,可以直接通过对象点属性,对象点方法这样的方式呢,去调用属性和方法,现在我们看看通过反射,哎,通过这个反射我们呢也来去调用啊,这个对象指定的。属性和指定的方法行,比如说我还跟你一样,你调这个A,你调这个受,我也这样做,首先我们通过这个class啊,它去get一下指定的这个属性啊,我们叫啊这个用这个方法叫declared field,这个属性名呢叫age。属性名叫age啊这呢也有这个相关的这个异常啊,都抛出去这块有点长了啊不不房呢,我直接呢,就整个就是让它抛一个exception得了。
05:08
啊,这个太多了啊,直接呢,就抛一个这个。行,这就OK了,这样的话呢,我就能够获取到咱们class对应的这个person类里边叫name这样的一个属性啊al enter一下,诶不妨我就叫它edge了啊,那拿到这个属性以后,我们希望给这个属性呢附一个值,值呢是十,哎,我这样来调它A点,哎做一个S操作,我们把这个P对象这个值呢改成十行改完了。这个大家呢,肯定是这个不太懂啊,你现在呢,就看一个热闹,你主要知道我们通过反射我到底干什么事了啊,知道这个事儿就行,那完事以后我们再去调一下这个对象P,你看我们这个属性是不是确实改了。诶,你看确实从12呢变成十了,没问题啊行,这呢是我们调属性,那接着调方法啊,这个是咱们调调属性。
06:08
下边呢,我们去调用这个方法,调用方法,现在我们还通过这个class点我get declared,哎,方法叫method,调什么方法呢?我们调了方法呢,叫做受方法啊,在这呢,受方法啊,这个方法呢,也没有任何的参数了,哎,那直接呢就这样写就行,那实际上呢,我们调的这个方法呢,你看我们做一个这个叫F2啊F2这个方法的话呢,你会看到它其实有很多的参数啊,嗯,首先呢,你指定一下这个name,这参数一就是指明你这个方法的名字,后边呢,你会看到有一个点点点。可变型参,这个可变型参呢,这块是让你填什么呢?参数类型对就是方法的话呢,我们说叫这个名的方法是不是可能有很多呀,重载嘛,那那这块呢,你得指明你这个参数到底是什么,那咱们这个问题授方法根本就没有形参。
07:07
没有形参呢,咱们可变这个个数的形参,本来也说了没有,是不是也可以不写啊,哎,所以我直接这样写,就是掉的是空参的这个收方法啊,行,那这样al enter,咱们得到一个方法,不妨呢,我也就叫它show了,那接下来呢,我们这个show方法呢,不是想调用一下吗?我们叫invoke,哎,我们通过这个对象P,或者调的是对象P这个的呃,授方法啊,调它的授方法,这个方法呢,也不需要你传任何的这个实参了,直接就是一个P就完了啊。这个呢,F2仍然呢是呃两个参数啊,这个参数呢,其实就填这个十参的,跟咱们上面这个对应啊,就先不多说啊,这个因为呃大家呢还没有具体展开讲,所以呢,先就看一个热闹啊,这样的话,我就把这个收放完了就调用了,调不调用你就看里边有没有c out了,执行你看这不也执行了。
08:00
OK,相当于咱们做了一下跟刚才这个收方法一样的事儿,行,那么原来呢,在反射之前,我们这个通过person类啊,哎,造对象调属性,调方法做的是这三个事儿,那现在呢,我们说通过反射呀,我同样的可以做这个事儿。呃,相当于他们俩目前好像功能是一样的啊。
我来说两句