00:00
行了,这个不是重点,各位啊,了解了解了解啊来,那么接下来咱们继续再往下,再往下就是重点必须掌握了。大家猜一下应该讲啥了?猜测一下应该学什么了?我觉得根据根据我的讲课的这个思路,你应该能推测出来我接下来要干啥。同学们。发表一下你的看法行不行,听课你这块。方法执行。就是我们通过反射机制怎么调方法,是不是reflect啊,TEST10,这是个重点啊,必须掌握,重点啊,必须掌握,就是通过反射机制怎么去调方法,通过反射机制怎么调用一个对象的方法。那如果不使用反射机制,怎么调用方法?那我觉得这个大家都会吧,不使用反射机制来吧,User service user service new,一个user service好。
01:07
New出来,New出来之后呢,接下来调呗,User service一个方法,User service它有一个方法对不对,这个方法叫log in啊log in方法里边传一个用户名密码,用户名啊,怎么密码的话,假如我传个123进去,那么这个时候呢,我们会返回一个布尔类型log in成功了还是失败了是不是?哎叫log in success,然后呢,我们输出对吧,Login success log in success。执行一下。那这个结果就是登录成功是处呗。是不是啊,那如果说你在这儿,你把这个密码换一下,那你再去登录的话,你看就登录失败了,那就是false了。对吧,哎,放了,那如果说你想要一个好的结果,那你可以这样三步运算来做,如果条件为真的情况,就开示登录成功呗,是不是其他情况就登录失败呗,对吧?哎,登录失败,那你执行一下你看。
02:02
咱就调这一个方法传进用户名密码,你看登录失败是吧,哎,那如果你123,那就登录成功了呗,来走一个。就登录成功了。对吧,你看以前多happy,是这样,我们有对象。对吧,哎,调用方法是,这是不是创建对象啊,这是调用方法啊。是不是,哎,那如果说有一天不让你这么写了,统一使用什么呀,使用反射机制来调。调用一个对象的方法该怎么做?根据我讲的那个field,各位大家来点思路来根据我讲的那个field,现在你去脑海里边。想一下啊,应该怎么做。
03:05
先获取一个类。对,有道理。获取class,哎,获取class来获取class啊,Class这个叫user service class class.for name这个位置有个类名。是吧,哎,这个类的名字呢。过来放到这儿。好,拿到这个类名之后呢。我们在这创建对象。创建对象应该会吧,class.new什么instance这个方法是不是创建对象啊?这是不是就是那个对象。
04:02
哎,对象有了之后呢。你是不是得调方法,是不是得先获取这个method。对吧,你你是不是得获取这个方法。哎,我们怎么获取属性,还记得吗?怎么获取一个属性,还记得吗?我想把这个属性拿到,根据属性的名字拿。我要获取方法,怎么获取呢?到底获取这个方法还是获取这个方法呢?思考一下,获取属性可以通过属性名。获取方法,只靠方法名行不行?获取方法只靠方法名行吗?为什么不行?因为Java语言中方法是可以怎么着。叫什么?
05:00
干什么?Overload重载。就说你其实可能会有一个方法,也叫log in,有这个可能明白吧,可能还有一个同名的log in方法。明白什么意思吧,区分一个方法,靠修饰符反馈类型区分吗?不是吧?区分一个方法是怎么区分的呀?JA法中区分一个方法是靠什么区分就行了。需要通过修饰符和返回类型吗?Java中怎么区分一个方法?依靠什么?方法名和参数列表。对吧,方法名和行参,所以现在呢,我们要想获取我们的这个方法,那现在你怎么写这个代码呢。因为我们要调这个方法嘛,是不是调方法,你就先把方法拿到啊,你对象是创建出来了,对吧,这步是完成了,这个对象不是有了吗?这边是不是通过反射机制创建出来对象了吗?你要把方法获取到,怎么获取啊,哎,Method login method怎么拿。
06:13
怎么拿,肯定是调这个user service class肯定没问题了,点什么get declared method的话,大家看是不是获取所有的方法这个。看见了吗?后面是个啥,各位。是个class点点点吧。是不是个class点点点啊,它是个什么东西啊,可变长度参数吧。是不是可变长参数啊。对吧,哎,这是可变长度参数,前面是个什么,各位前面是个方法名吧。前面应该是个方法名,它靠靠方法名和行参吗。对不对,你这个你这个参数的个数。可以写多个。你要拿这个方法。那么这个方法的方法名叫什么叫log in,那么你拿过来放到这就可以了,后边这个参数大家看这个log in是不是有两个string啊,所以这块你写string.class string.class就行了。
07:12
我不是讲过吗?点class这个属性是不是可以获取到class啊,点过去大家看第二个参数是不是class。第二个参数是个class,你看。是个class啊,是个class点点点它不是个string啊,是string的话你是字符串对吧?哎,它这也不是int,它是个class。他是个class,你这准点class,准点class。对吧,哎,你要注意,那假如说如果你这个地方有一个方法叫logging。这个login方法里边有一个参数是int。哎,你有这么一个方法,你想拿到你这个login方法,你不想拿这个login方法,那你这边代码怎么写。怎么写?
08:01
你想拿到下边那个login方法,你后边的参数怎么写int.class明白什么意思吧,你这样写的话,就相当于是拿到的这个老给方法。听懂了吗?如果你想拿到它的话,它后边是两个string,你这边就得按照上面的这个写法拿到一个log给方法,那获取login方法之后呢,调用方法。来我们分析调用方法的有几个要素,各位调用方法有几要素,有几个要素分析一下啊,来要素分析要素一是什么对象。对吧,哎,要素二呢。老给你方法吧,方法名是不是要素三呢?实际参数列表吧,是不是实际参数十参是不是实参列表对吧?哎,要素四呢。
09:05
返回值吧,你看是不是四要素。是不是调这个对象的这个方法,传这个参数,最终返回这个值。有四要素,那我问你通过反射机制是不是同样也也得有四要素啊?也需要什么四要素吧。对吧。对象没有啊。调你这个对象这个方法呀。传这个参数啊。返回这个值吧。是不是,哎,你看看这个啊,怎么做login方法是拿到了,通过反射机制怎么调用点invoke。各位invoke单词翻译过来是调用,大家看啊,这个invoke这块是不是有两个参数可以跟。一个是object,一个是object,点点点。那第一个object应该是谁?应该是这个对象。
10:00
调用这个对象的。这个单词翻译过来,比如调用啊,调用调用这个对象的这个方法。传这个参数哪个参数。这个。是不是传这个参数。对吧,最终是不是应该有一个返回值。这个调用其实就是谁,就是invoke。调用我们这个对象的这个方法,传递这个参数,返回这个值,为什么传两个磁钝,因为这是两个磁钝啊。你这个方法是不是两个string啊,所以你调这个方法的时候,是不是得传两个字符串进去啊。调用这个对象的这个方法返回这个值啊,大家看这个invoke方法是不是返回一个object。这个非常重要啊,反射机制中最最最最啊,反射机制中最。最最最重要的一个方法,必须死记。
11:02
硬背。啊,必须记住吧,我不管你采用什么招啊,必须记住这个叫invoke。四要素有啊,四要素有啊各位。对吧,Login method是方法吧,思考一下。是不是老人?Method是方法。OBJ是对象。我的命123是什么?是食餐?Return value是什么返回值?调用我们这个对象的这个方法传递这个参数,返回这个值。这个值我们输出一下,由于我们传的是DIN123,所以最后的结果是true吧。来运行一下,看是不是出。嗯,没问题吧,如果你密码传错了对吧,那么这个时候就登录失败啊,登录失败就是false。
12:03
就是通过反射机制,你看通过反射机制是不是可以调用一个对象的方法呀,调用这个对象的这个方法,传递这个参数,返回这个值。是不是,哎,这个呢,是通过我们的反射机制去定方法,这个例子是很重要的。很重要的啊。五颗星。12345啊,必须掌握。必须掌握啊,就上面的这种方式是咱们以前的先用一个对象去调一个这这个对象的这个方法,传这个参数返回一个值,现在呢,是我们把这个对象创建出来,然后呢调用我们的。Get declared method这个方法来拿到方法,拿到方法之后呢,去去调用这个对象的这个方法,传递这个参数,返回这个值啊是这样的一个情况,各位啊,还是一样的。没什么区别啊,没什么区别,我还是那句话,使用反射机制去调方法的目的是为了以后的灵活,因为类名可以配到配置文件里边,方法的名字以及类型都可以往配置文件里边写,包括将来传的这个参数也可以往配置文件当中写,这样的目的只是为了改配置文件,改完配置文件我们程序不需要做任何改动。
13:22
看见没改配置文件,不需要做任何改动,程序就可以创建别的对象。然后怎么着啊,去调用别的对象的别的方法,这个代码就很具有通用性啊,反射机制让代码很具有通用性啊,反射机制让代码很具有通用性。啊,可变化的内容都是写到哪儿,都是写到配置文件当中啊,将来修改配置文件之后,创建的对象,创建的对象不一样了,调用的方法。
14:04
也不同了,但是Java代码不需要做任何改动,这就是反射机制的魅力啊,就在这个位置上啊,在这个位置上,这就是反射它最主要的一个一个一个魅力啊。
我来说两句