00:00
好了,咱们继续啊。上节课呢,主要是做了一个咱们的投资人信息的一个查询明细啊,还呢说了一下这个反射,反射这块的话,第一个例子主要是说了一下这个可变长参数啊,还有第二个例子呢,主要是咱们说了一下啊,让大家理解理解class。什么是反射啊,用反射用来干什么的,有什么优点,Class method constructor field这些东西呢?它呢?呃,是什么,是存在什么,什么用啊,另外获取class呢,有三种方式,这三种方式要记住,第一种方式class.for name,第二种方式点class属性啊,第三种方式其实就是我们对象啊,去调用get class方法。嗯,这三种方式都可以啊,都可以用第二种方式,我再写上吧,就是任何类型包括什么基本数据类型,也包括引用数据类型,都有哪个属性啊,Class属性啊。
01:16
第三种方式就是通过什么任何一个引用啊,都有哪个方法呀,Get class方法吧,这个该方法啊。这个方法是来自于object啊。好了,那这样的话,咱们把这个class呢,呃,说了一下,行,就是这样啊,再来一个例子。这个例子呢,我主要说一下这个cloud for name,有的时候我们会返回值,有的时候不会返回值啊。class.for name方法这面跟上什么呢?完整类名吧,这个呢,它有的时候会返回值,有的时候我们是不是也不会返回值啊,我们有没有单独用过这个有吧啊什么时候。
02:23
不返回值,什么时候返回值呢?这到底有的时候写这个,有的时候写这个吧。你见过这个吗?这BBC第一步是不是就是它,那为什么没有返回一个class啊,为什么当时没返回啊?应该想过这个问题吧?你见过有的时候怎么返回一个class附上去,有的时候不返回就就就就就用c name的区别是什么?
03:03
来class t啊,我再写一个class,比如说T吧,在这输出啊,这样吧,再加一个static啊,这是个什么呀?这是静态代码块吧,静态代码块啊,在类加载时执行,这边呢,我写上输出一句话啊,Static。行吧,简单写写就行了啊,这边我怎么写啊,class.for name啊,然后这边呢,我跟上那个类的名字是这个吗。来复制一下放到这点的D吧,好,这边的异常呢,我就上抛吧,啊好了,这边呢我就点右键运行。大家看有没有执行啊。执行了吧。需要返回值不需要吗?不需要吧,所以什么时候用这个呀。
04:04
什么时候用它,什么时候用它呀。啊,如果只只希望什么,只希望使用类加载机制,可以不返回任何值吧。就是一个类呢,它只有一个静态大板块,其他都没有,你希望这个静态大板块执行,你可以怎么写,这么写还是这么写。一个类只有静态代码块,然后你只希望这个类的静态代码块执行,其他你任何操作都不想做。就用这种就行了吧,需要反馈值吗?不需要啊,你返回值,你是不是就是为了拿到这个之后呢,就相当于拿到这个字解码,拿到自解码之后,你是不是还可以去操作其他的字节码啊。所以这两种方式呢,你都见过,用过这种方式,也用过这种方式。
05:02
什么时候用这种方式,什么时候用这种方式,你心里要有数啊,什么时候返回值,什么时候不返回值,像这种情况就是一般情况,如果你只希望啊类加载执行执行静态代码块,那你用它就足够了,没必要干什么了,返回值了。明白吗?那什么时候用它呀,如果希望什么呢?操作这个类中的什么其他的字解码啊,例如什么方法呀,构造啊字段呀,是吧啊可以使用什么,可以返回值吧,可以防止。大家听明白我的意思了吗?就是我在讲一个问题啊,什么问题,就是大家以前编程到现在,你应该接触过这两种方式,你都用过,你应该返回过class,也应该没有返回过值,这这这两个到底应该怎么选择,什么时候用上边这个,什么时候用下边这个,这个其实它的作用就是类加载。
06:00
你如果只只想用类加载功能,你没必要返回值啊,但是如果你你你你除了这个之外,你还想操作这个类里面更加的细节的一些东西,你想操作方法,你想操作这个类里面的方法,你想操作这个类里面的构造函数,你想操作这个类里的属性,那你就必须返回一个class吧。是这意思啊啊,所以这个你知道啊,行了,这个就说到这。啊,这就是为了什么?这这样写上吧,这就只是为了用什么,这就表示只是为了使用该类的什么,加载了该类的类加载机制啊。类加载,使用类加载吧,啊就表示只是为了使用类加载,那还有一种方式,比如说现在我这个 classt1T啊,这个T呢,里边有方法啊,比如说有词盾类型的name啊,在这呢有个方法,Public avoid that name方法写上去词name写上list.name name,然后接下来在这有个构造public t写上嗯,这是无偿构造,现在你这个构造方法呀,有属性啊,现在比如说你现在在这class点什么for name写上name名字,把这个复制一下啊,直接贴过来,然后这边改成什么T返回一个class c,你这个返回class c,你的目的其实就是为了干什么。
07:29
你拿到C就相当于拿到这个类了吧,拿到这个类你是不是相拿构造方法能拿,拿方法也能拿,拿拿字段是不是也能拿呀,所以这边的话,这个就是为了他拿这就这就是这个啊有什么这个接收了什么返回值吧啊为了更加容易操作什么。该类中的什么或者T啊,T1类中的什么方法构造字段吧等啊是这样,是为了刚才操作这个才返回的,所以有的时候返回,有的时候不返回。
08:05
这是我讲的第三个例子,讲完了啊,没什么技术含量吧啊给你提一提,因为有同学有疑惑啊,我以前的时候有同学就经常问这个问题,老师,我有的时候看你有的时候返回值,有的时候不返回值,这这我又懵了,我就啥时候返回值,啥时候不返回值啊,这个简单啊也是吧,你要是想操作这个类里面一些东西,那你肯定得返回值啊,你要是不想操作这个类里面东西,那你可以不返回值啊,你如果这么写的话,其实就是告诉我,你只希望用一个类加载动作,如果你是这这么做的话,我就我就知道啊,你你想是得到C,得到C之后呢,你就想操作这个类别更加更加多的一些东西啊,所以这样呢,你得区分开啊,什么时候用这个,什么时候用这个,你心里要明白啊,好,接下来第四个。这边我再写个类吧,TEST04啊,我来讲一下JDBC的注册驱动原理啊。GDDC编程第一步是注册什么驱动啊,class.for name吧,括号里面写上什么oracle.gpc driver.oracle driver吧?啊,这个原理是什么?
09:27
哎,大家知道吧,注册驱动有两种方式吧,注册驱动包括两种方式啊,两种方式来先看第一种方式,第一种方式是怎么写。Driver吧driver吧,用一个什么oracle.g d DC driver.oracle什么吧,好溜出来调用一个方法叫driver manager,里边有个方法叫driver注册驱动吗?是不是把上面driver传过来啊。这个类是不是没有啊,报错了吧,这个类是不是没有,因为这是Oracle的类吧,前面是包名类吗?后边是类的名字是吧?啊,这个类在哪呢?
10:13
哪?行吧,导进来怎么找,点右键属性build pass library添加账包是吧。往上走啊哪个呀,反射吧,是不是有立呀,点它啊打开OK。
11:00
嗯,这个有了吧,你看oracle.jd bc driver是这个吗?是这个包吗?里边是不是有个类啊,这个类叫什么。Oracle driver Oracle driver哪呢?好,这边是不是不报错了对吧,你只要把这个类倒过来就行了啊。这就是呢,大家GDPC编程第一步注册驱动,这么注册就行了,这有异常,这个异常咱们这么写吧,加一个TRY吧,点右键啊,Surround with try catch加上去好了,那这样的话,这边呢,就讲了注册驱动的第一种方式,这能注册驱动吗?来我获取连接行吗?如果连接对项能获取到,是不是注册成功了?来连接项怎么获取啊?Connection怎么写?Driver manager.get connection吧,这写上GDBC来写上。
12:01
Local host吧啊1521端口,北京power这个用户呢,咱们叫Scott对吧,这个叫tIgEr哈,好了就这样,这边呢,我把这个connection输出行了,如果connection对象能输出的话,就证明是不是成功了运行啊。行了。没问题吧,连接对象已经创建成功了,啊啊已经创建成功了,这证明连接数据库成功了,这证明这种方式行不行。可以吧,但是大家平时写这种方式吗?一般不用吧,一般你都不用这种方式,你怎么写的?第二种方式啊,是class.for name吧,直接写了一个什么,是不是直接把后边这个类名拿过来了,是不是放到这了。是这意思吧,啊,你是这么写的啊,干部能来运行行不行啊,你看运行行吗?是不是也可以拿到对象,也能连数据库啊,所以哪种方式常用啊,啊这种方式常用啊,这种方式注册驱动,这种注册驱动的方式在项目开发中比较常用,为什么比较常用?
13:23
有同学老师这是两行,这是一行,你说有道理啊,有道理呀,是吧,那确实是吗?这是一行吗?这个两行你肯定不用这个呀,你。还有一个问题重很重要啊,为什么这是个什么双引号对吧?既然是双引号是不是它是个字符串,既然是字符串就可以写到配置文件中对吧。是吧,啊,这种方式比较常用啊呃,这种方式常用的原因类名可以得到很好的什么配置对吧?文件啊可以得到很好的配置。
14:10
哎,我现在就讲一讲这个原理到底是什么,这个为什么写上这个跟居然跟这两个,你想一想,这俩可以完成相同一个功能,但是这两个代码长得完全不同啊。根本不沾边吧?这俩怎么还能一样呢?来测一下。在这呢,我写一个类啊,Class my class这个很重要啊,面试官可能会问你是加现在大板块行吗?可以吧,好,这边我写上啊两行。去掉。点击文键surround with开加上好,这个是在什么时候执行,在类加载的时候执行吗?啊,并且只执行一次,表示这个里面加满什么意思啊,是注册驱动吗?是不是注册驱动吗?注册驱动啊好,这就是注册驱动,那我问你我是不是也可以不写这种方式。
15:34
这样行吗?运行啊,看连接能拿到能不能拿到。就非得非得写这个啊。不是吧?我就我就不写你二口子是吧,我就写我自己行了。行啊,这么我我写字的也行啊,来运行这个可以吗。
16:01
为啥?原因是什么?刚刚讲过class for name这个方法在执行的时候会发生类加载,而这个类加载的时候会执行静态代码块,而这个静态代码块完成了驱动了什么?注册吧。好,我问你说明一个问题,什么问题,如果上面这种方式能够执行,是不是足以说明在这个类里边也有一个什么。在这个类里边是不是也有这么一个静态代码块。class.form name是不是发生类加载,让这个类加载的时候,这个类里面的静态代码块执行了,静态代码块执行是不是完全驱动注册呀,所以强调一下啊,真正注册驱动是哪个是这个。这个才是真正的注册驱动,这个是什么?是面上的。啥意思啊?这不是本质吧?Class点方name发生类加载,让这个类加载的时候会执行这个类里面静态代表块吗?啊这么一个意思,也就说老师你咋知道的。
17:04
来翻译一下class文件。门店还能翻?这个吧,点右键啊,咱们挤压缩。看看就知道了,打开打开吧,这个吧,这个吧,哪个Oracle Oracle driver。是6万这个能打开吗?这个可以,咱们不是安装这个工具了吗?叫open with DJ吗?叫decomeller反编译吧,反编译的意思就表示把class文件再转换成原先的什么字解码啊,但是这个字解码呢,不一定是原先的字节码,呃,不这个这这个这个这个原文件不一定是原原先的那个程序了啊,但是大部分是相同的。他不可能,你想一想,一个程序是不是有多种写法,我这么写也是这个结果吧,我那么写是不是也是这个结果呀,所以你想想来点右键啊,咱们回去了啊,来回去。
18:02
点试用就行了啊,一起看一看这个类是谁写的。是Oracle写的吧,啊Oracle写的。嗯。然后艾瑞克写的这个累呢,往下走。啊。看见了吗?时间圈不用看啊。这个认识吧。这个呢?是吧?是不是啊?哎哎哎,看啊,这是个什么。现在代码块吧,好我问你这个代码什么时候执行,类加载是执行吗?好我问你类加载这个类加载了吗。拉点方是不是具有类加载作用,把这个类加载的时候是不会执行这个类中的什么静态代码块吧,静态代码块执行是不是就完成了驱动注册呀。
19:06
所以他可以呀。所以本质上呢,我想提一件事啊,什么事,我希望大家能够把这个这个这个本质上东西学会了啊,JDBC编程第一步注册驱动老师说了class for name写上就行了,Class for写上就行,但是你不知道为什么。原因是因为卡for name呢会发生类加载,当这个类加载之后呢,在这个类里面会执行什么静态代码块,而那个静态代码块执行的过程就是执行上面这两句话。明白我意思吧,其实你写这个也能注册,这个写这个也能注册,但是为什么选这个,我说过了,这个能写到配置文件里边吗?这种方式是不是可以写到配置文件中吗?可以。好,这是一个本质上的,希望大家能够呢注意起来,可能面试官可能会问你啊,为什么JDBC编程第一步是class.form name跟上驱动的名字。
20:04
原因是你只要跟他说一句话就行啊,什么呢?这个驱动里面有静态代码框,完成了驱动了什么注册。明白吧,而我们只是借助一个类加载功能。就会执行静态代码块完成驱动注册,能理解吧?好,那我问你啊,这么写行不行,实际上这么写可以吗?行吧。我们在一个类的时候会发生类加载吗?我们你有对象的时候,这个类会加载吗?加载的时候会执行那注册驱动吗。你看很有意思啊。行吧。可以吧,可以啊,但是这么写不好啊,这么写不好。
21:00
你别这么想啊。这么写能配吗?这种方式能配置明白吧,这种方式能配置就用它就行了,不要在这扭了啊,不在这扭了,用它就行了,用它就足够了啊,他就name。用这种方式来给它删掉啊,咱们再运行,我们要的就是这种结果。但是如果你上面要是不做的话,这种方式肯定是不行啊,它跟驱动没关系了,你上面得得写这么一句话。还是那句话啊,面试官问,你就跟他说啊,在驱动里边有个静态代码块,在静态代码块完成了驱动注册。所以看方就行了,能理解吧,啊,这样可以了啊好了,这是我讲的第几个呢,第四个例子了啊,来继续往下看,1234再往下看啊。今天上午咱们就是讲反射啊,把反射的慢慢的咱们捋一捋啊,要不然呢,我直接写反射,你可能都忘了不知道在干什么是吧?来OK行了,这边的话,这是第五个例子,这个例子我讲讲我讲点啥啊。
22:08
嗯,讲点什么呢?行吧,咱们这个建个包吧,建个包吧,咱们建个什么呢?建一个service吧,好建个service,想到这个service里边有一个类啊,这个类叫system service。叫系统服务,在这个系统服务里边呢,我提供两个方法,一个方法呢,返回不玩类型啊,叫封录方法,写上一个user nameme,写上一个user password return啊我写死吧,行吧,Iin.e什么user name吧,并且什么叫一二三点e user password,行吧,也就是说只要是输入用户名是呃的in,密码是什么123的话,就表示登录成功的,这个方法啊,是一个登录系统的方法。接下来我再来一个方法吧,这个方法它没有返回值啊,叫log,好的叫推出系统,然后呢,这个方法和上面方法有区别,这个里边没有参数,直接我说出一句话叫系统已安全退出啊,已经安全退出,行了,就这么简单,我在这写上,这是一个退出系统,哎,叫退出系统的方法。
23:23
行,那这个类写了两个方法,都是成员方法,要想调这个方法或者调这个方法必须先创建对象,能看懂吗?接下来我在T05里边来使用反射机制去调用这个对象的这个方法,以及这个方法行吧?来主要掌握的内容啊,是使用反射机制,使用反射机制调用对象的方法。好,我们一起分析一下不使用反射怎么做不使用反射机制。怎么去调用调用对象的方法怎么做的,就直接system叫什么service吧new呗,System service吧,New完之后呢,是不是就可以直接调方法了,怎么调ss.log in呗,调这个方法来log in方法写上in密码,写上这个叫什么123是吧,写上123,写完了它会返回一个波尔类型吧,叫success吧,Success好这边呢,大家想一想,我是不是这边可以把这个输出啊,结果success吧啊啊,那运行吧。
24:38
这不处吗?很简单嘛,第一步就是什么创对象吗?第二步呢。调方法吧,就直接直接调方法吧,直接调用方法即可啊,这种方式是固然是非常简单的啊,是很简单,是不使用反射机的调用对象方法就怎么做。
25:01
创对象直接调,有了对象直接调方法,传递参数返回值。就行了。这是不使用反射,但是这种方式呢,以上存在缺点什么缺点以上啊方法调用存在的缺点是。什么写死了?累。固定了对吧?方法名干什么?固定了还有什么参数固定了是吧?不可扩展吧,不可扩展啊呃,最好使用什么?最好使用反射机制调用反射机制调用的时候类名类名可以配置到什么配置文件中呢?嗯,还有呢,方法名也可以什么配置到什么配置文件中吗?配置啊到文件中还有吗?参数也可以配置到什么文件中啊啊都可以灵活啊,要么就是个灵活,但是我说一下这个程序的复杂,嗯,缺点反射缺点啊,反射的缺点反射的反射的缺点是程序复杂。
26:22
不好实现,另外啊,另外啊,就是操作自解码啊,效率比较低下,效率比较低啊,其实这样反射它其实是通过一种特殊的方式啊,把这个类的资行码再扫一遍的,这样的话其其实效率不高,嗯,但是呢,这个你要知道啊,不使用反射的去调方法,就直接就对象调就行了啊,这种方式呢,其实什么方类名啊固定了呀,什么方法名固定了呀,还有这个参数固定了呀,嗯,这块的话可能扩展起来就不太好扩展了啊,所以这时候使用反射机制的时候呢,可能这个类名啊能配进去呀,方法名啊能配进去啊,参数啊可以配到配置文件中啊,所以就灵活了,但是有缺点啊,实现起来程序非常复杂,而且还有一个操作效率其实有点低啊,有点低,不过也还行啊,低不到哪去吧。
27:18
反正跟上面这个程序比的话,可能稍低稍微低一些啊,上面这个是不是根本就不用扫什么字节码,就直接找到一方法调这就可以了,嗯,行吧,咱们这个注掉了啊,来注掉来注掉往下看,怎么用反射机制去调这个对象的方法,现在我这个类已经。对了,这个这个这个这个Java文件你知道吗。不知道是吧,不知道啊,不知道,但是你你能能不能,呃,有一个人把这个类他的方法写到配置文件中啊。把方法签名写到配置文件中行不行?把方法的签名啊,什么叫签名呢?从这个位置开始,到这个位置结束,我们叫方法签名,方法的签名写到我们的配置文件中啊。
28:03
也行,这样吧,咱们来看看,我就不使用这种new对象调的方式,我希望大家能够通过反射机制去调用这个对象的这个方法怎么做?到了今天上午的核心内容了啊,大家注意一下,嗯,精力集中一下啊,困的话你就站会儿啊,没关系,你困了吗,是吗。这个啊。就是说这个这个这我去原先是你有对象的这块掉的,现在我不想你对象了,我想通过反射去调用这个对象的这个方法怎么做呢。大家想一想,要想从反射机制去调这个方法,你是不是先获取这个方法字节码?也就是说你得获取这个红色方块里面东西吧,你要想获取这个是不是得先获取这个类。因为你拿到这个大方框的话,你才能得到这个小方框了,是这意思吧,拿到类的整体字解码,拿到之后再拿其中这个方法的字解码吧,听清楚了啊,要想通过反射机制去调用这个对象的这个方法,必须获取这个字解码,要想拿到这段字解码,必须拿到这个整个字解码,拿到整个字解码之后,通过一些特定的手段可以获取这个字解码。
29:14
拿到自写码之后就可以掉了,怎么怎么拿这个,拿这个就先拿这个吧,怎么拿这个有一种方式讲过三种呢,Class第for name写上这个地方不能随便写吧,这获取整个类的什么字解码吧,获取整个类字码怎么获取?那这个吧,嗯,复制一下,嗯,贴过来点。走这个吧,嗯,好贴过来,好,我问你这个返回值还是不返回值啊,这个就必须返回值啊,你要是再不返回值你怎么调啊是吧,行了,这边咱们就就把异常处理一下得了啊exception好了,我问你,现在你已经进行了第一步,已经把这个类的字节码拿到了,现在想拿这一段字解码,你怎么拿?
30:06
这属于什么范畴?Master的范畴吧,所以这个时候的话,你想你这一堆都拿到了,这一堆你应该好拿吧,怎么拿应该是通过C拿吧,因为C就代表什么,就这一堆吧,然后拿这一堆怎么拿c.get嘛,猜也猜到了,C肯定有个方法叫get嘛,而且这个get方法你也能猜测到它的返回值一定是个什么。那你都想到了,这是个method这个方法吧,所以这时候你就看吧,啊来get往下走。你看返回值啊,看返回值。其实也可以直接调是吧。哎,你看啊。嗯。是吧?是不是有这么一个方法呀,其实我说一下啊。像这种编程呢,我觉得反射这边啊,不好学呢,有两方面啊,我是总结了很久才总结出来了。
31:06
因为我发现同学们都出现一个问题啊,第一反射这个词不好理解,可能会导致你这个兴趣上的受挫。二还有一个问题,什么问题啊?我觉得可能还有一个问题啊,什么问题呢,就是这个英语单词这个不过关,英语这块不过关。就是我发现这个这个反射这一块呢,其实方法超多。你只要你说挨着玩记忆那不太现实,太多了那记不住,所以你英语要是好一点的话,其实这个东西。也还行。啊,也还可以能过关,所以这个英语啊还是很重要啊。嗯,你比如方法叫什么method的吧,那你构造函数叫什么什么construct吧,那属性叫fail了呗,你要想获取属性,那就叫get get它呗,要想这个就get它呗,所以你看到一个get它吧,Get method的吗?
32:01
啊,实际上还有一个方法啊,叫get method,你看往下走往下走啊get method m嗯,是吧,叫哪个呀。调这个呢,还是调上面那个呢。有两个。这个其实我说一下啊,调这个的话只能获取公开的方法。明白吧,如果掉上面那个方法的话,我解释一下,它可以获取私有的。明白什么意思吧,所以这个咱们就调下面那个吧,行吧,其实当前这个调下面那个数也可以啊,因为这个方法是不是公开的,那个方法是公共的吗?啊公开的啊行了,咱们调吧,啊来调get低clear method。哎,掉下边啥意思啊。这是获取这个类中所有的方法吧,但是现在我只想要几个呀,要一个好,那我问你。现在你要一个方法。听清楚了,你要的是一个方法。
33:00
在一个内容。方法A和方法B进行区分的时候,是靠什么区分的?靠方法名能区分开吗?不能啊,因为在同一个内容,除了方法名相同之外,有可能参数列表不同,这是加法圆中的一种机制,叫方法重载机制。哎,Java员支持不支持在一个类里边方法名相同,支持吗?支持是吧?好,那你现在知道叫这个就行了啊,在这个javascript里边行吗。ZS边行吗?支持方法重载吗?不止是。JS代法还支持人来写上啊方程是吧c hello吧,来写上,我这写了一个方法,完了之后,我就这个方法还能再写吗?再写之后是不是方法重复了,就因为它这GS有一个规律,这个规律是什么?这个方法你定义好之后,参数随便传。
34:02
啊,这个你忘了来,我问你这个方法和这个方法一样吗?一样明白吧,是一样的,也就是说我调上面这个say hello方法的时候,我是不是可以直接写一个什么say hello,我相信大家应该知道,调的时候不是也可以就直接写个say hello,括号里面什么也不写啊,然后我说我写一个行不行啊,行了,我我写两个是不是也可以,这GS允许吗?允许,但是你到加法中允许吗?加法中那是相当严格的一个方法,有一个参数,那你就只能传一个参数,有俩你就只能传俩。是这意思吧,所以一定要记住啊,你类虽然拿到了,就代表你已经拿到全部资解码了,这个全部资写码拿到了,你就要考虑拿到这个类里的这块字写码了,但是你要记住这个方法有没有可能在上面也有一个叫log in方法,而且这个方法呢,可能只有几个参数啊,一个咱下一个。能理解吧,所以你看人家提供这个方法超好,你看这个你看啊很有意思,你看啊点get declare,你看这个方法的参数啊。
35:08
Be clear method。那走往后你觉得这两个参数啥意思。嗯。你就你就你就你就看这个这俩参数啥意思。我说过来了,你要想调这个获取方法,你到底是获取的这个方法呢,还是获取的上面这个log方法。所以区分的时候肯定要靠方法名区分,但是方法名区分能区分,但是不能够完全区分。所以你看人家是怎么说的,这个方法里边要跟两个东西。一个是string name,还有一个是。
36:00
后边的这个是啥意思。Taters还有一个点点点,这个我说过吗。而且啊。这是我刚才不是讲过了吗。看点点点嘛,这就class点点点啥意思啊。这个是不是数组吧,数组中每种类型什么类型啊,是不是class类型啊,行了,那你看我这个这个方法里边是不是有两个string啊,所以我这该怎么写。是不是这个,是不是这个这就行了。这写什么log in?了解这了解吧,看再再再再来一个啊看啊这这有login方法啊avoid login行吧,这个方法里边啊干啥呀,没有参数。
37:02
也没有返回值,反正写完了,写完之后呢,你要想获取这个没有参数的login方法,你这个该怎么写。啊,只写一个什么,后边什么也不写了。哎,你还记得吗?这个东西参数的个数是零到N个吗?也也也就是说这个可以不写是吗?也也可以写一个吧,也可以写十个哈,没问题,但是每一个类型什么类型啊。Class是不是代表类型?strange.class什么什么意思?这是strange.class是不是代表string类型?String点是不是代表string类型吗?那如果你这再有一个方法,你说这有个方法啊,比叫什么public,什么login,然后方法叫型A项B项B啊写完了,写完之后,你你你你现在想获取这个方法怎么做。
38:01
啊,C get的什么declared什么。Clear the method是吧?这个方法还是叫什么OK吗?只不过这个参数怎么写啊,我问你这是行参吗?行参类型对吧?行参类型行参你懂吧?什么叫食参啊?食参是方法调用时候实际传递的参数吧,行参哎,来说一说吧,啊行参和食参行参是什么方法定义时。方法定义时参数的啊,或者形式参数类型啊,方法定义时参数的类型,或者方法定时的参数吧,这时参是方法调用时的参数吧,调用时的参数,这叫形式参数啊,形式参数是声明阶段的,明白吧,声明阶段的实际参数呢?是什么阶段呢?
39:05
实际参数是运行阶段的,明白吧。是运行阶段调用阶段的传递实际参数啊,传递实际数调用阶段咱就这么着吧,啊来新单这个是什么类型来着,叫叫叫什么int点什么class和什么double点什么class,好,你现在获取的这个method的M1,你拿到method的什么M2,然后又拿到一个什么method的吧M3吧,你现在呢,你就相当于把这个方法拿到了,但打包啊,别打错了,是反射机制里边的method啊走。下边你俩助教了行吗?这个我不用啊,我主要是用这个这个方法,我起个名啊,叫什么呀,叫log matter行吗?这是通过反射机制获取什么字解码,获取login方法的什么相关字节什么啊,好,我问你全部的字解码你拿到了,通过全部的字解码,你又拿到了其中一个方法的字解码,这个方法的字解码你拿到之后,你能不能调啊。
40:14
怎么调?那你得看这个method里边有什么方法。通过反射机制调用方法怎么做?来这边有个窍门,我希望大家能把这个窍门掌握啊,以后编程就这么写就行了,来这边呢,返回一个class吧,返回一个better了吧,好,我们得调用英语单词怎么说?调用翻译过来的英语单词叫in book了。是吧,那你想一想,是不是应该找一找这个log method,这个method里面是不是有一个方法。Control in book。嗯。是这个类吗?是个VO吧,好解释一下什么意思,你觉得这个和这个是分分别要传什么参数?
41:09
方法在调用的时候传实参吗?方法在声明的时候叫行参,方法调用的时候叫实参,哪个是实参?哪个是13?这个。这不点点点吗。那个叫什么点点点。给了点是这这是类型对吧。这个object object节点是什么?实际参数吧,这跟类型有关系吗?没有,这是实参吗?实上说的不是方法,声明说的是方法调用吗?来调用。里边第一个参数你不好理解,来,我来解释一下啊。点哪个点爆的啊。好解释一下啊,这个参数什么类型object,这是什么什么类型啊,Object点点。
42:10
点吧,这个这俩参数。好,而且这个VO它有返回值吗。这个有返回值吗?啊。没有返回值以后吧,来有了啊。返回值是object return什么来着?行吧,好来解释一下啊,对比一下这几个方法。我们来问你啊,这么调跟这么调是代码不一样,但是呢。原理相同吧?比一下行吗?比一下啊,什么对比,通过这个对比呢,大家可以更好的掌握这个反射。开始对比了啊。这是直接创对象调的,这个是通过反射调的,不管是怎么调,总之它俩原理是完全相同的,原理都一样,唯一的区别就在于大家看代码不同,我来捋捋啊,是什么意思,调用这个对象的。
43:08
这个方法传递这个参数。返回这个值。几个部分。四个调用这个对象的这个方法,传递这个参数,返回这个值,好,我们来捋捋这个是什么意思。这个单词是调用的意思吗?调用这个对象的。这个方法。传递这样的参数。返回。这样的。这个对的是谁?这个对的谁?这个呢?
44:00
是吧,这个呢。是不是这不这不完美了吗?这是四部分,这是不是也得需要四部分啊,捋捋啊,调用这个对象的这个方法传递这个参数,反馈这个值,调用这个对象的这个方法传递这个参数,返回这个值一样。记住了吗?要不你就把我刚才说那句话背会吧,啊,怎么说的,调用这个对象的这个方法,传递这样的参数,返回这样的值,四部分缺一不可。行吧,你只要能把我刚才那个口诀给背会了,那你这反射就差不多了,这个matter是用的最多的。后期tru spring里面全都用了这个evoke方法。明白吧,全都用了引爆。Invoke是调用的意思,所以你就知道这个参数传什么了。翻开我把这个SS能不能传进去啊。
45:04
当然我们得通过,我们不用它,我们将来是不是也可以通过反射机制去创建对象。我这省懒劲啊,我就直接把SS传过来行吧,嗯,实际上这边呢,可以通过反射机制去把这个对象创建出来。这是那个对象吗?这我我这么做啊,来个复制一下,我放过来得了,准备一个对象,这个对象我就叫做object吧,行吧,调用这个对象的。这个对象吧,哪个方法。是这个方法吗?传递什么参数?啊,The mean。密码是多少?123是吧。123啊好,这个方法执行拉,方法执行结束有没有返回值。有了好。这个返回值的结果是true还是false运行?
46:02
是吧,再来一个再调一次,怎么调啊,调用这个对象的这个方法,传递这样的参数,返回这样的值,这个值返回是什么。都能调啊,你上面是调,只不过是直接用对象调的,下面调呢,虽然有点复杂啊,大家看这种方式的话,你想一想方法名能配到配置文件里边吗?类名能配到配置文件里边吗?那你说我这个代码很神奇啊,我只要写写写一遍,你你来一个方法我就能掉,来一个方法我就我就能掉了。你要是这么写的话,是不是就写死了,你这个类写死了,你方法是不是也写死了,参数都写死了吧。所以你对这个这个灵活。这个灵活呀,这个。行吧,那咱们再讲一个啊,还是上面那个通过反射机制啊反射啊,反射机制调用的logo的方法来怎么调logout的方法更好调,因为这个logout的方法大家想一想,有参数吗?没有,有返回值吗?没有,所以这个叫log的方法是不是很简单呀?来咱们试试啊,来这边的啊,怎么写method吧,Logout method吧,怎么获取啊c.guide declare的叫method方法名叫什么?Lockout有参数吗?没有,不跟返回之后lockout有一个方法叫invoke,调用哪个对象,这个对象的哪个方法传递什么参数,没有参数吧,没有返回值吧,这就完了。
47:47
这个方法有参数吗?没有不用跟吧,没有参数啊,有返回值吗?这个没有来运行看行不行啊,系统已安全最终啊。系统已安全退出执行了,这说明什么?这是不是说明这个类里面这个方法执行了,这个方法为什么会执行,因为你在这反射机制调用了呀。
48:08
能记住吧,所以今天呢,上午讲的第五个例子,我希望大家在下一周多写几遍。这个呢很重要啊,一定要当回事,后期的反后期的那个stru spring框架都会用这个方法,所以呢,大家把这个方法一定要练一练,是怎么通过反射机制去掉的。好了,可以先休息一下啊。
我来说两句