00:00
诶下一个内容呢,叫调用运行时类的指定结构,我这儿呢加红字了,说明呢是需要大家掌握的,那这里的指定结构主要呢,我们指的是属性和方法,你也可以再加上一个构造器也行啊,那属性方法构造器当中非要再指明一个重点的,那肯定还是方法。咱们呢,去调这个通过对象调结构的时候,多数还都是调方法的,哎,所以这里边儿指定指定结构呢,重点的啊,重中之重是方法啊,那重的呢,就是属性跟构造器呢,大家也关注一下,其他的呢,就不用关注了,行,我们来说明这样的一个知识点,在JAVA2下新建一个类。诶,我还叫做这个。Reflection嘛,哎,它的一个测试啊,我们这呢,想演示的就是调用。运行时类。哎,类中指定的结构,哎,这个指定结构我们呢,主要指的像属性方法和构造器,那我们就按照这个顺序先来说一下如何调用指定的属性。
01:14
哎,这个我就写个叫get fields了啊field了。Test test field吧,这样首先也得有这个大的class实例,它是整个我们反射的一个源头。还是我们Java伊里的别导错了,接下来我们现在呢,想调用指定的一个属性啊,对于属性的调用呢,其实体现为两方面,就像我们通过对象调属性的时候一样,一方面呢,是你想获取一下这个属性的值。另外一方面呢,你可能给它附一个值,相当于就是体现为一个叫get,一个叫set了哈,那这呢,你是获取和设置值,前提是先把这个属性拿到啊,那我们下边呢,就先看如何拿到这个属性。
02:03
先,那叫获取指定的属性。行,通过class。第二,Get指定的一个属性。刚才我们演示获取属性结构的时候呢,见过两个方法叫get FS一个。还有declared fields,一个就是咱们刚才那会演示过这个和这个是吧,那现在呢,你看我们想获取指定的某一个属性时,恰好呢,你看它就显示出来了,就是这俩。来获取field啊declared field是不是大体上根据刚才这个说法,大家也稍微有点感觉有点区别是吧?啊,咱们如果想获取的这个属性权限比较小,你是不是得declared呀,这个呢,是不是就。Private你看是不是搞定了,行,那咱们分别演示一下,看看是不是咱们想的这样,现在我就调一下叫get field了。
03:03
第二啊,Get一个啊field我用一下这个,现在呢,我们想找某一个名的属性,看一下我们person类,哎,这个我们把这个其他的这些都给它关掉啊,再把这个打开看这俩就行了,Person里边我们声明过这样的,咱们先整一个权限大的啊,比如说叫public的叫ID。行,那有可能呢,你这个写的字符串对应的ID呢,不靠谱没有,所以呢,这会抛异常都给他抛出去,给他抛的稍微大一点啊。首先咱们拿到这个field。拿到这个field不妨呢,我也叫做ID了,属性拿到以后,我们想给这个属性设置一个值。但是呢,你这个属性是一个非静态的。非静态的属性是不是得依托于对象啊,哎,那不妨咱们之前呢,就把诶那会儿讲的一个这个代码需要大家掌握的再写一下啊,叫创建运行实例的对象对回忆一下啊,是不是class,第二对new instance。
04:14
诶这个呢,咱们诶就给大家声明成这个person了,做一个强转,好我拿到这个属性了,对象呢也有了,接下来我们就先叫,呃先调用吧,调用调设置。设置咱们当前这个属性的这个值,哎,那我们就通过这个ID这个属性掉的啊,哎,我们设置呢,这个叫set set呢有两个参数,第一个参数就是你要给哪个对象设置啊,我们这是P对象设置成多少,诶设置成这个,诶这个你就别加双引号了,它本身是一个int类型是吧,直接就写1001,相当于是一个包装类,嗯,Inte了啊。
05:00
正常就设置好了。那在这里边我们指明一下啊,这个参数一。哎,这个set方法啊,它的这个参数一,哎参数一呢叫指明呃设置呃,这个设置哪个对象的这个属性,哎,然后参数二,哎,这个将此属性设置为多少。哎,设置为多少啊,你把这个数据呢,就写到这儿就完了。哎,这是这样子的啊,这呢就相当于是一个赋值了,然后呢,我们还可以呢,来获取哎,当前这个属性的啊,当前某个对象的属性值还是通过我们这个id.GET1下来拿我们这个P对象它的这个当前属性值。获取哎当前属性的这个值啊,这个呢,我们叫get方法,它的参数一,哎,获取哪个对象的,哎当前属性值。
06:14
哎,指明是哪个对象啊,那这个get以后,因为呢,你赛的时候呢,认为是object object,所以你盖的时候呢,自然而然他也认为你是一个object object。啊,但实际上呢,咱们是一个int型是吧,哎,那我就直接写个int呢叫哎我这叫ID跟上边这个呢就冲突了啊哎,我们叫P对象的一个ID啊,我叫PID吧,做一个强转啊行,那拿到以后我们去看一下这个PID这个值。这样子这呢设置是1001了一下。哎,没有问题啊,能够拿到,那如果呢,我们一开始没有做这个设置,这是多少。行吧,哎,因为你这时候掉的空间构造器,哎没有复活值不就是默认的零吗?哎这呢做了一个设置啊行,这呢是拿这个ID,那再想一下啊,除了这个ID之外呢,我们还有一个age啊,这个age的话呢,是一个默认权限的,我们现在考虑一下这个默认权限呢,能不能搞定呢,我就简单的把这改成是个age了。
07:18
这个我就暂时先不改这个名了,年龄呢,也先1001岁吧,先这样啊测试。是不是错了,叫no such field exception无法找到是吧?哎,往哪去想呢?咱们当时讲这个get fields加S的时候呢,说过说你获取的是不是PU这个权限呢?啊,那你现在呢,我们改成age,这个age的话呢,按正常来讲,我们在同一个包里的啊,说应该是能掉,但是呢,很遗憾,它是不是获取的也是public权限的这个属性了,哎,对的啊,所以这块呢,我们获取指定的属性,这里边我们要求,哎这个运行室类中的属性呢,声明为是public的。
08:08
哎,生命为这个public,但是我们属性生命为public的情况是不是太少了,对,所以通常咱们都不爱用这种方式啊,哎,所以这种方式呢,我们说哎就抛弃了啊,通常。哎,通常不采用哎这个词方式啊,或者此方法了,哎不爱用它了,那咱们呢,去举一个咱们真正开发中爱用的,哎,Test这个我们还叫这个field。哎,这个叫一了行,一开始的时候呢,也是得先做这个事儿啊,哎,CTRLC。这个没问题。这个有问题啊,这个有抛是吧。
09:00
好,那创建了运势类的对象了,接下来我们去获取某一个属性,咱们通常爱用的呢,诶都得是呢,叫get declare的,这个叫field,哎,找到某一个指定的属性,哎,这个属性呢,比如说咱们找谁呢。找内吧,咱们整个权限最小的啊,行,那么out enter,诶,这呢,不妨我就叫做name,这呢是咱们开发中真正爱用的啊,叫get declared field,这个位置是string类型的一个,叫field的一个name,看获取指定名的一个。属性。中啊,指定啊名的啊,或叫指定变量名的。这个属性那这呢我们就能拿到了啊,哎,通过我们讲获取所有的属性呢,你有一个经验,此时呢,私有的呢,也照样是能够拿到的,拿到以后我们接下来呢,就想去给他做一个设置了,这个咱们刚才已经讲过了,比如说这写个P设置为一个年,呃姓名啊,就叫做Tom吧,设置完以后呢,咱们还可以去get一下,直接我就c out了,通过name呢,去get一下当前P对象的这个属性值。
10:22
按说呢,内是不是就能出来了,哎,看一下行不行。哎,又错了。又错了,但是注意啊,这个错误的信息呢,它并没有说我们实例化的是一个问题啊,不是实例化啊,就是说不是说呢,找不到的一个异常啊,它叫什么呢?非法访问啊,非法访问杨ID呢,是找到了,但是他不让我访问,哎,就是这个意思,那我们这个这个这是一个name哈,我把这个name的话,这个权限我稍微放大一点。这就算稍微大了点了,这个时候看行不行。
11:05
还不行是吧,放public呢。他肯定行了是吧。这是可以的,那总不能我们还整成public,整成public,你上边这个那不也可以用它了吗?没啥区别了,咱们就想给他整成这个private了。嗯,这呢就提到一个问题啊,我们这时候你说获取到了吗。获取到了,但是呢,你下边不能够去做这个事儿,你看我把这个事儿呢,注释掉以后。没报问题说明呢,确实拿到了,他跟我们这儿比如写个这个内幕一不一样啊,内幕一这种呢,他是没拿到,对他就没有啊,这是没拿到,我们现在呢,确实拿到了,但是拿到以后呢,你现在没有去修改的能力,还是因为人家封装呢,提了一个这个事儿啊,说你这是私有的默认情况下呢,不让你改啊,那我们就想改,所以呢,我们在这个两个操作之前,诶必须呢,大家要加一个操作,对我们呢叫set accessible,必须呢把它制成是一个处。
12:18
哎,这个呢是这样,这这张处以后下边呢,你才可以去修改,诶你看这时候呢,才没有问题了。行,把这个呢,我们总结一下啊,那实际上呢,我们这呢,是咱们开发中,如果大家要用的话呢,这样去用有这样的几步啊,首先第一步通过这样一个方法获取咱们指定的这个属性先,然后第二步。如果我们写的是一个通用的方法,我不管你这个属性是public的还是私有的,是不是我通通通通都加上这样一个方法。你要是一个公共的,按说不用写,那我写上是不是也不错呀,哎,对啊,对,这个呢,我们叫set accesso啊,相当于是叫保证当前属性呢,是可访问的。
13:07
哎,这呢,就要求这是一个处,那这个设置完以后,你第三步哎,再根据你的实际需求啊,这个可以啊叫获取。哎,获取或者呢,你要设置啊,然后指定这个,诶对象的这个次数性质,哎这样子去操作。行,把这个呢,大家当成一个规范的操作,需要大家去掌握啊,说如何获取如何呢去操作吧,哎这个指运行实类运行例中的这个指定的属性,哎这个呢是需要大家掌握的啊好,这个呢,我们就说完了。
我来说两句