00:01
好了,那那咱们就继续吧,啊继续了,那我们上节课我说了这个呢,是通过反射机制去反射我们一个类当中的一些属性,那么这个呢,呃,虽然我们讲了很长时间,但是呢,告诉大家的是这个不怎么用啊,不怎么用。其实是以后绝对是不会用的啊,应该不是说不怎么用,应该是。肯定是不会用的。啊,因为到目前为止呢,这个东西呢,哎,我们是知道它可以做这件事儿,可以反编译对吧,哎。但是接下来我讲的这个东西,就在座的各位就必须掌握了啊。所有人必须掌握啊,掌握一个什么内容呢?还是这这两个类吧,还是这个类啊,Student。掌握的这个内容,哎呀,我刚才在这个0506里边我写上吧,这是了解一下。啊叫了解一下啊,这个零五里边,零六里边也是了解一下好吧,了解一下零五关了零六就关掉啊,然后这块呢,这个我们来看一下,再往下的这个内容就必须要掌握啊来class我们就叫做reflect test reflect反射啊。
01:21
Test。零七。嗯。嗯。来,那么这块呢,咱们来看一下啊这个。怎么通过反射机制访问一个对象的属性啊,就是说怎么通过反射机制访问一个Java对象的属性。就是给属性赋值啊。
02:02
对吧。给属性赋值啊,对不对,哎,获取什么属性的值啊。对不对?哎,给属性赋值啊,获取属性的值等等啊,那么怎么通过反射机制访问一个Java对应的属性呢?我们来看一下。来,首先呢,我们还是先获取整个class,那是肯定的了。class.for name是不是?哎,然后这块呢,我们就直接把这个类的名字拿过来。嗯。那么拿到这个类名之后呢,接下来我们要获取就是你要你要操作一个对象的属性,你们先获取到这个属性对吧。你是不是得先获取到这个属性才行啊。
03:03
对吧,获取到这个属性是不是才能操作这个属性啊。就假如说我们,如果你大家思考一下啊,如果我们不用反射机制,应该怎么去访问一个对象的属性。就我们先先看看这个吧,这这个回顾一下啊,有同学不知道我在干什么,就我们不使用什么呀,反射机制。怎么去访问一个对象的属性呢?大家演示一下,这个应该都会吧,Student new一个什么student new出来啊,New出来之后呢,来我们给什么呀?属性赋值啊,怎么附啊S点什么number啊,附一个值学号吗?是不是来读取属性的值吧?啊读属性值怎么读啊哎,输出s.number。啊。对吧,这就是给属性赋值,这个就是对象不是有了吗?那你通过这个不是可以给属性赋值吗?通过这个方式不是可以读取属性的值吗。
04:02
对吧,你执行一下,你看它结果是111,你负的值是1111,它就是1111对不对,那现在我的意思是啥,大家不要通过这个方式啊,就是通过反射机制。就使用反射机制,怎么去访问一个对象的属性。啊,Set get对吧,哎,怎么去修改这个属性的值,怎么去获取属性的值。首先你这里是不是有一个对象啊?你这有个对象你。这边是不是也可以通过反射弄一个对象出来啊。叫new,什么instance,这个方法虽然已经过时了,是不是返回object?好,大家看这个是不是就是那个student对象。这个对象就有了吧。对吧,啊,这个对象还得有啊,要不然你访问的是是谁呀,对吧?这个对象有了之后,你访问这个对象的属性,你输出这个对象属性的值,在这里我们是获取了class之后,通过class它的new instance这个方法调的无参构造,还记得吧,无参数构造方法调的是这个类,这个类student这个类的无参数构造方法来创建的这个对象,OBJ就是student对象啊,OBJ就是student对象。
05:17
啊,底层调用无参数构造方法,实例化对象,那么接下来你要访问这个对象的这个属性,那么你首先第一个你要获取这个属性,获取number属性。啊,你怎么获取这个属性呢,就是你怎么能拿到这个代码呢。对吧,你现在这个类的代码你已经拿到了,你怎么拿其中这一个属性。我们刚才在上一上节课的时候,我们说了是获取所有的什么属性,我现在只想拿其中一个。那么大家现在思考一下啊,一个类当中属性有这么多个,他怎么知道我拿的是这个还是这个,还是这个,还是这个属性,还是这个属性呢?
06:01
思考一下,就是属性和属性区分靠什么来区分?属性和属性之间区分靠什么?是不是靠这个名字?是不是靠名字来区分?对吧,就获取属性依靠什么名字来区分,我们现在要操作这个属性。那我就要把这个属性拿到。那。我怎么拿这个属性呢?这个属性和上面这个属性的区别就在于名字不一样。所以我们来研究一下,看看有没有这样的方法获取这个属性student class。这是整个类。整个这个类,这个类呢,想获取其中一个属性,它是否有一个方法叫get declare的菲斯,你看这个方法。这个方法大家看下边有一个,看见没有,这个方法是获取,上面这个方法是获取所有的属性的,下边这个方法大家看,可以获取一个属性,没有这个S了,这个方法就get declared field,没有这个S了,参数是一个类型的。
07:06
诶,那如果说我把这个属性的名字给他拿过来放这儿呢。那它获取的是不是就是一个field,是一个number field呢?诶,这样就拿到了啊,获取number属性,属性和属性之间依靠名字来区分啊。如果你这个位置写的是什么呀,是内的话。哎,那你现在返回的这个属性就是谁啊,就是它如果你这个位置写的是age的话。那么你获取的就是这个属性。那如果你获取的是写的是number,那获取的这个属性就是它。那你拿到了这个属性,接下来干什么呀?哎,注意啊,根据属性的名称。
08:00
叫做属性的名称来获取什么呀?Field,拿到这个field之后呢?你要干什么呀?你要读取,你要给什么呀?给属性赋值。给这个OBJ对象啊,这就是那个对象啊是吧,给OBJ这个对象的no属性赋值。这个OB这对象就是个什么对象,就是student对象。对吧,这是个student,这个类创建出,那这个定是student,我们要给个student属性。那怎么呢?哎。他有一个方法,各位。这个啊,这个字段,这个上面有个方法叫。参数是传谁把OBJ传进去。把你要负的值传进去。
09:01
那么这句话的意思是什么意思啊?给obj对象的no属性怎么着,Number属性怎么着,赋值2222。很诡异吧,很诡异啊,但是你得死记硬背,给我背会了。大家看这个代码和这个代码其实有点类似。上面这个代码能看懂,是new了一个学生对象,通过这个学生对象他的number给他赋个值,1111。然后呢,去访问输出吧,那么这边呢,同样这两行代码是不是代表这一行。这两行代码是不是通过反射机制拿到了这个class,你就instance这个方法拿到了对象,这个对象就相当于是这个对象,接下来我们拿到了这个属性,是不是调用set,大家看啊。给这个对象的这个属性赋这个值,是不是这里有三要素?对吧,给S对象的no属性赋值1111。
10:02
对不对,哎,要素一是什么对象S。那么要素二呢?思考一下要素二是什么?No属性对吧,哎,要素三是什么呀。是1111这个值。那么大家考虑一下,虽然我们代码变成了反射机制的这种方式,但是三要素还是缺一不可,对吧?虽然使用了反射机制。啊,但是三要素还是缺一不可,要素一来各位要素一是什么。是啊。OBJ什么对象对吧?是不是要素二呢?No field的属性吧。是不是是不是也是number属性啊,哎,要素三是什么呀?是2222这个值。
11:04
所以你就靠着三要素去记这个东西,跟这是一个道理,给这个对象的这个属性负这个值,给这个对象的这个属性负这个值。调这个属性的set方法。啊,这就附上值了,各位,这是通过反射机制给他赋值啊,有的人说老师啊,我不喜欢这,我不喜欢这,我喜欢这,我以前一直这一直这,你现在突然让我这对吧,我就不能这对不对,那这个是这样,各位啊,反射机制的这种写法,虽然代码啊会让你的编码难度增增大,但是它具有通用性。你比如他能不能写到配置文件里边。大家思考一下,这个属性的名字能不能配到配置文件里边?而我们这个位置的值,能不能也在配置文件里面配置一下呀。都可以吧。你这种方式是不是只能给这个对象的这个属性赋值,而我下面这个代码。
12:02
是不是就可以给。某一个对象,某一个类型的对象的某一个属性怎么着啊,负某一个值,你你好好想想,这个是不是很灵活,也就是说它能不能写到配置文件当中,他能不能写到配置文件里边,他能不能写到配置文件当中,如果将来把这个类名改的,呃,配置文件里边类名改了,配置文件里面属性名改了,配置文件里面属性值改了,我问大家只要改配置文件,这个对象是不是就变成新的对象了,这个属性是不是新的属性,这个值是不是也是负新的值啊?所以这个代码就非常非常灵活,这是发挥反射机制的一个灵活性,这个后期我说了框架,包括呢,Spring m VC啊,MYSSM3的光架,底层实现原理全是这个。全是这个各位全是采用这种方式的啊,就是为了灵活,就是反射机制代码虽然增强啊,反射机制代码虽然复杂,但是它灵活。各位啊,灵活要的就是这个灵活啊,说了半天就是灵活。注意反射机制让代码复杂了。但是为了一个。
13:08
灵活,这也是值得的。同学们,告诉大家一个不好的消息啊,不好的消息,不好消息是什么呀?就今天学了这个东西啊,可能你好几个月不用。好几个月可能不用啊,直到你讲框架的时候可能才会用一下。所以这个中间这个过程呢,我希望各位怎么着呢,哎,不断的偶尔去回顾一下,偶尔去回顾一下啊。听明白了吗?我们学这个东西也是为了理解后期的框架,你以后真正去写反射的代码还是很少的。写反射机制代码是实际上机会很少,在实际开发中一般都是我们研究这个框架底层实现原理的话,我们需要怎么着啊,哎,懂这个反射机制,你要不懂的话,这就难了啊,就难了,所以说呢,呃,大家呢,哎,可能还在中间得不断的去回顾它啊来,那么接下来咱们继续再往下,那么附上值,那么读取属性的值怎么读呢?哎,你猜应该能猜到这个number field,它里边除了这个set,它还有一个什么呀,叫get。
14:14
参数传一个object。那相当于获取这个对象的这个属性的值。啊,这个get方法它的返回值,我们来看get,你看它返回object。看见没?哎,你把OBD传进去,它返回object。啊,来我们输出就行了,直接输出啊。这是获取属性的值。你看获取这个对象的这个这个属性吧,它的值吧,是不是两个要素啊,两要素吧,是不是两个要素啊,获取S对象的什么no属性的值吗。是不是那这个呢,这实际上是也是两个要素啊,两个要素。
15:03
嗯。两个要素,哎,什么情况。两个要素。要素啊获取。Obj对象的。No属性的值,属性的值也是两个要素一样,你上面给这个对象的这个属性负了一个值是R2,所以你在这调用这个获取这个对象呢,哎,这个属性它的值的时候就是R,你看执行一下走。对吧,222上面这个1111是谁啊,是这样输出的啊。下面这个对象的创建,你看访问这个对象的属性,获取这个属性对吧?哎,然后呢,给这个属性怎么着赋值是不是,哎获取这个属性的值你看。可以。对吧,诶没问题啊。
我来说两句