00:00
那除了这个之外,当刚才呢,咱们说上面的情况时,说在person类的外部呀,我们不能够去调用person类这个通过对象调私有的结构啊,私有的结构呢,就是属性啊,方法呀,构造器啊都不行,但是我们说通过反射是可以调用调用咱们这个person类的私有结构的,比如私有的属性,呃,先私有的构造器吧,私有的方法,私有的属性都可以。啊,原来反射很强大,那我们既然说可以了,调一下看看,在我们这个P类当中,我声明了一个构造器,嗯,写这了,私有的这个构造器正常咱们在外边呢,你想你有一个person,填一个参数是不OK的,现在我们看看通过反射啊怎么做。class.get我们这时候叫declared constructor,呃,此时呢,咱们参数呢,就是string类型这样子行,然后呢,我们al enter一下,哎,仍然生成我们一个叫constructor啊,这个我们叫坑一这样啊,这呢是得到这个构造器了,这个构造器的话呢,这个我们得先做一个操作啊,叫set accessible啊这我写成个处,哎,为什么要写,咱们后边再讲,接下来我再通过这个构造器,哎,去给他用一个对象啊,这个对象我们换一个,比如叫Jerry。
01:33
啊,然后此时呢,就给我们返回了一个对象,还是一个object类型,咱这呢,直接做了一个转换了,我这叫P,哎,做一个强转啊行,那这时候我这个P就是咱们person类的一个对象,我在这个位置,我加一个这个操作啊下边呢,是咱们调用的这个叫私有结构,我通过的构造器呢,就是刚才的私有构造器看看。
02:01
大家看哎,这时候呢,我们这个name呢叫Jerry name呢是零,哎就是调的是那个一个参数的构造器啊,确实可以实例化,行,这是一个问题,接着我们去调用它私有的属性和方法。先掉这个私有的属性吧。属性我们在里边呢,有个内幕属性,以前呢,咱们讲封装性的时候提过,说这个属性呢,是私有化了,我们只能通过公共的盖赛方法啊,去获取和修改啊,那现在的话,我说通过反射我可以直接来修改你这个私有的属性。好自由属性,首先我们通过这个class,哎,第二我get叫declare的field,找到这个属性名,属性名去叫name,哎接着呢,我们先返回一下啊,哎,这不叫name幕属性,然后接着这内幕属性,哎,注意也得先set accessible写成是个true,接下来哎,Name幕点我们做一个set操作,哎,我们把这个P对象这个呢name改成一个新的名,换成这个,比如叫哎韩美美。
03:13
这个大家呢,知道这个名目,就是你们那个英语大学,这个这个中学一上来还是对人教版的是吧?韩美美李雷是吧?行韩美美啊,嗯,后边好像出这个电影了啊嗯,这呢,我就做了一个设置,我是直接来通过这个对象来操作的这个属性啊,那设置完以后呢,你可以通过啊s out,看一下这个P1是不是改了,做一个验证,你看这时候确实叫喊妹妹了。我这是直接掉的这个属性没有通过赛方法,这呢调所有的属性好,接着调用所有的方法,这样所有方法还是通过我们这个class.get declared method,我们有个思有方法叫show nation这个CTRLC私有的啊,然后这个方法的话呢,有参数,参数呢是一个string类型的。
04:17
对,所以我这就这样写了,首先呢,得到这个方法al enter一下method,啊不妨呢,就叫做show了,然后这个show方法,哎,我们呢,首先也是让它叫set access改成这个true,再接下来我们这个show,第二咱们呢调一个invoke,我们通过这个P对象呢,进行一个调用,呃,写一个国籍叫中国。哎,这样的。哎,这样呢,Mo就是叫调用的意思,相当于啊,相当于呢,咱们之前呢,都是这样写的p.show nation,然后你这里边呢,是不是写了个中国呀。哎,你从这个角度呢,也可以稍微感受一下,什么叫反射呢,原来是不是对象调方法,现在成了方法调对象了,是成了是吧,这个叫方法调对象也不对哈,这个来讲是不是我这仍然是对象调方法了,这呢对象只不过是人家这个类型的一个对象啊,Java里边永都是对象调啊,只不过呢,呃,这个对象恰好是咱们原来这个方法这个这个呢参数啊,倒是原来这个对象了啊,感受它具体内容呢,像是反过来的,其实仍然是对象调这个属性和方法啊,那这样的话呢,我们就执行完了看一下,因为咱们这个说内里边呢,我写了一个输出语句啊。
05:43
哎,我的国籍是中国,诶确实呢,调用了实调了,那再多说一个事儿,咱们原来你要这样调的话呢,这个方法有返回值,咱们可以去接收一个string,就叫做nation,没问题吧,那你说我们这个方法调换完以后,是不是你也有个返回值啊,这个返回值怎么体现呢?我们这个方法呢,有个返回值,这个方法的返回值就是你这个,哎,Show这个方法的返回值。
06:11
说的有点绕啊,直接的我们来写string,就是我们的返回值啊雷这个呢,默认返回的是我这类型的做一个转换。哎,那我们谁out一下这个nation,对我们之前呢,你这个方法返回值不就是中国吗?哎,原来这样写方法的返回值,现在呢,是通过我们这个方法来体现的它的返回值,哎,就是我们刚才这个的返回值啊。诶,这不就拿到这个中国了,好总结总结反射之前这个大家呢非常清楚,反射有了以后,我们这里边用到的大家没有见过的这一篇呢,都是咱们反射当中提供的这样一些,包括呢,咱们这里提到这个class,呃,因为呢,它是这个object,呃浪包下定义的了,所以不用去导包了啊呃,这里边我们就用到了反射相关的这个API,呃,刚才我们在这里边提到的是不是这几个都用到了。
07:16
哎,都用到了这呢,就是反射这个相关的API内容,通过反射呢,我们可以做原来呢能做的事,创建应用实例的对象,调属性,调方法。还能做原来做不到的事,调这个person类,这个person类的话呢,如果我们在运行的时候啊,哎,把这个person类呢,就称作叫运行时类了,相当于咱们可以调用叫运行实类的私有结构,原来做不到的反射呢,也能够做到,这就是我们反射的强大之处,以及呢,他可以做的这些事儿。
我来说两句