00:00
那这个完了以后,刚才咱们讲属性呢,还试图呢,去获取过属性具体的某一个结构,那现在呢,在方法这块呢,其实咱们也可以做这样的事情。啊,也可以做这样的事情,那这个事呢,要做这就挺细致的,就啊。看一下。这个方法,那我们现在知道这个方法呢,都得有哪些结构,首先叫权限修饰符,返回值类型方法名是吧?哎,接下来呢,就叫参数列表了,参数类型一。嗯,然后呢叫哎行参名哎行参名一,然后逗号一下啊,后边可能还有就是参数这块呢,可能有多个,那么后边一堆大括一堆大括号啊呃,在这个位置我们还有可能呢,会去throw一些异常,哎叉叉叉的exception。
01:02
行,这就这个结构还没完,在权限修符的上面是不是可能会有这个注解,哎,这样的一个情况,注解呢,可能还有它具体的一些值,那现在呢,我们讲这个注解就得考虑一下我们如何获取这个方法它上面的注解啊,这样一个问题啊成那下边呢,我们就来看一下这几部分,这里边有点多了,但这个事儿的话呢,其实也是有点无聊哈,咱们一般呢,也不会啊去做这样的问题啊,就是我们专门去拿到它的某一个类型,用的比较少啊,用的比较少,那看一下吧,比如第一个事儿,咱们去获取方法声明的注解。嗯,获取方法声明的注解在我们这个person类当中,咱们呢,呃,这也有over的啊,但是over呢很遗憾。它是S的,所以我们获取不到,那上边咱们这个show my an notation,哎,咱们这块呢,是一个runtime,就看它了啊,那这个是一个构造器,咱们也没有调构造器这块也没有获取过类上的,主要呢,就看这个方法里边这个myation啊行回过来,那获取注解是针对于所有方法的,那不妨呢,我们就先把上面这个代码呢拿过来。
02:23
先这样啊,然后接下来拿到每一个这个方法,然后呢,进行一个for循环,CTRLC这样子在这里边,诶,我们一个一个的获取。这呢是我们每一个方法这个M,第二我现在呢,想拿到它的注解,就有一个叫get a notation,你是不是想拿注解是吧?啊叫get an notation4诶怎么还有一个数组呢。为什么反应值是数组类型啊对,方法上你是不是可以声明多个注解啊,对,而且咱们扎二巴还讲过说可重复注解,一往这一个注解就可以写好几个,更何况呢,还有几个不同类型的啊,所以呢,是一个数组类型,哎,接收一下哎,我就捡起了啊,哎,这呢又得便利了是吧?
03:23
哎,下边这个for,哎,In一个I,哎,Ii啊这个我还用这个增强for循环吧,哎,A notation,然后A冒号an OS这样,诶我们去c out一下换行了就不要了,诶这个换行得要啊,因为咱们一般的这个注解完以后呢,都换行了,那这着急输出一下这个A就行。那对于大多数方法来讲,我们都没有注解啊,就只有一个方法声明了,我们看看这个执行会不会有相应的一些效果执行。哎,出来了这呢,这不就拿到了吗?其他的都没有啊,所以输出的时候你就看不到了。说明呢,注解确实能拿到,那进而的话呢,我们把这个person里边的这个注解改一下,第二改成一个其他的,比如说class,我们在试图获取一下。
04:14
没有,哎,这就不行了,那通常呢,咱们开发中用注解的话,一般呢,都会在反射里边呢,想着去获取一下啊,当然这个指的是咱们自定义的,或者我们这个具体一些情境当中的,像咱们常用的这个over read啊啥的,他们就没有必要去获取了,它就在编译的时候做一个检查,很多这个注解呢,都在运行的时候呢,它要起到一定的功能啊,哎,我们都需要加上righttime,好回过来这个呢,是关于注解,不多说,在下一个。关于权限修饰符,诶关于它了,权限修饰符跟我们刚才说的属性的获取方式呢,其实一样,哎,一样,那通过这个m.get呢,叫Mo fairs,哎,得到一个in的值,你再包装一下,干脆我们直接呢,就sit out啊,Mody fair.to string m.get Mo fears这样,哎,后边呢,加上一个,哎,这个制表符。
05:15
这样就不要它换行了,这么着哎,得到每一个方法的权限修饰符。就成这样了,嗯,这儿呢,我们出来了两个,你看是吧。这个这个嗯,Public public。怎么这么多publicb呢?哎,我这儿呢,没有换行方法呢,有点多,在最后这个位置呢,换一下行这样。每一个方法呢一行。哎,这就拉开了是吧,哎这样一个情况啊,诶这块呢,跟咱们那个这个compare处理方法有关系的啊,哎,所以你看它这里是这样个情况,所以这块呢,我们就看到public呢,就拿到了,哎有一个方法呢,是私有的,它上面呢咱们加了一个注解。
06:03
嗯,这呢,看一下我们这个person。哎,就是。诶就它,诶上面这样个注解是一个private行,再下个呢,就是叫返回值类型。那接着在这个来个三。诶,CTRLC一下这么着,反正类型。哎,方法的返回类型是不是就get一下返回值,返回值叫return type。哎,所以说呢,其实很好记啊,哎方法呢虽然很多,但是呢都比较有规律性,直接呢我做一个输出,哎,它点下盖那个name,哎,然后再加上一个杠T看一下。哎,这不就出来了吗?哎发生这类型就有,哎这个你看Y,哎Y本身我们也是说它呢,也是一个大的class的一个实例啊,哎所以说你看它这个反殖类型这块呢,也是个class,哎包括这个VO这个情况反人类型完了以后,下边呢,就这叫方法名。
07:14
方法名这个也比较简单,跟属性名呢也类似,直接我们m.get一下内哎就OK了啊,拿到这个方法名。哎,这呢就出来了,哎这样。行,方法名在后边呢,我们通常就会补一个小括号了,嗯,补个小括号就是咱们相当于想拼出来这样的一个情况啊,拼出来这样情况的方法名后边呢,不管是有没有行参,都会有这个小括号,嗯,那这个呢,通常咱们就不会加这个杠T了啊,这就不要了,那方法名下边来配这个叫行参。哎,行三列表啊,在这个上边吧,我们给它整一个,哎,单边的一个小括号,这样这样,然后在下边呢,我们去提供这个具体的形态列表,形态列表完了以后呢,你再给它整一个这个,诶封起来的这个小括号这样子啊,那这里边呢,就是具体的形单列表,那有的方法呢,没有没有的话呢,那你遍历的时候,它自然而然就是一个空的。
08:24
获取行参列表。那还是拿这个方法获取它的行参形态,就是参数呗,就是parameter parameter什么呀,这呢就获取参数的类型,那如果要是没有参数的话呢,这个类型返回完以后,数组自然呢,里边就没有这个没有长度了,相当于是吧,哎,我们获取一下它参数的类型。哎,得到一个参数类型,哎,这个发型呢,暂时我们先不考虑了啊,直接呢也删掉,哎接下来我们做一个判断吧,哎判断什么呢?如果我们这个参数的tap,哎,通常咱们都爱做的事就是要么呢,你判断它是不是等于no啊。
09:09
等于no呢,相当于是呃表示呢,可能就没有这个参数了,那也有可能呢,就是它不是no,但是它这个L呢是零。具体的话呢,你看人家到底是no,就是如果要没有行参,具体是no啊还是零啊,那你看这个方法里边怎么写了,如果你要想泛泛的去说,那这样的话呢,表示的其实就是一个没有参数类型的时候的一种情况啊,这就这种情况,那这种情况的话呢,咱们其实是不用考虑的,直接补一个小括号就完了啊,你可以在整个这个。位置啊,这个位置呢,哎,我们给它整个加个括号,还有一个非。是不是就行了。哎,不加非的时候呢,表示的就是它没有形参啊,那你加上这个非呢,不是表示就是有有形参呗,那有形参的话呢,我们就分别的把它这个参数的这个类型呢给它拿到,嗯,类型我们就直接输出了,输出直接拿到它,诶然后去get一个name,嗯。
10:15
啊,这个还得写一个循环了,得他说好几个嘛,因为有可能有好几个警察,那又得个for,有点绕了啊。这个事儿呢,咱们做的还不多,大家呢就看一下。拿到每一个参数的类型输出一下,别换行了,这个p.get一个I get一个name啊,你可以脑子里边形象点,比如说呢,有个方法形态是string类型的一个name,后边呢,Int型的一个age啊,那现在呢,我们这个数组呢,就是string和int啊,通过一个for循环分别拿到string和int啊,这是它拿到它以后呢,后边我们这块呢,就简单的去拼它的一个这个行参名了啊这个行参名这个事儿的话呢,其实又涉及到一个呃,GDP版本的一个迭代了,在以前的时候,我们通过反射呢,是这个还不能写了,通过反射呢,我们是没有办法获取到方法行参的名的啊,后来的话呢,我们JDK呢,提供了一个让我们获取这个星台名的一个方法了。
11:26
啊,当然我们其实用的也是非常有限啊,我这呢就直接写了这呢I没有没有I啊没有呢,我们把这个事改一下吧,这个我就不用放了,我用一个这个普通的一个放。诶,这个这个样子啊,这样的话呢,我就配出来的一个I,然后这块我就用I了,这个位置上就别写它了,CTRLC看这个数组的啊,第二个位置啊。行,这呢,就我们配出了其中的某一个,呃,每一个或者是啊呃类型,行参的类型和它的一个,呃相当于行参的一个名啊嗯,这呢,其要具体说还是有点恶心的,因为要是有俩中间有个逗号,一个呢就没逗号了。
12:19
对吧,咋玩啊,不太好玩是吧?呃,正常的话呢,这个就考察你这样一个,呃,小的一个算法题了啊,那正常的话呢,都带逗号,你要是最后一个的话呢,就不要带了,我可以在这写一个比如if吧,如果这个I它恰好呢,等等于这个LAS减一。是不是就最后一个星彩了,你要最后一个的话呢,你就光输出页他就不要带最后的这个逗号了,是不是就很聪明,哎,这样,嗯,这这是一个逗号一下第二个啊,如果还有逗号,这第三个,假如最后一个把它拼上以后,诶就这么着呗,这个你写完以后注意啊,小心点加个break啊,最后一个了,你就别又让它往下走了,嗯嗯,然后结束以后把这个括号封一下啊,好容易配出来一个这个结构啊,跑一下啊。
13:21
看看哎compare啊小括号,小括号这呢就只有一个参数,这个呢也是一个这个没有这一个,这一个没有俩的啊整一个俩的P类当中,嗯,Display吧啊兴趣,然后呢,In型的一个age啊兴趣有几年了,直接呢它再加上我们的一个age,看这样搞定来回来。哎,这呢,看这是词缀类型的它啊in的类型的它就搞定了。行这呢,我们就说完这个事儿了,在后边呢,说你这个方法呀,还有可能抛异常啊,抛一常,那接着说吧,在第五个完了以后,在这个位置,诶不能在这位置了,在这个位置啊,这个位置是第六个声抛出的这个异常,诶抛出的异常这块呢,也有点恶心,就是说呢,有的方法人家不抛异常,那这个Rose也不用写有异常呢,你再加上个Rose。
14:27
啊,就这么个事儿啊,那咱们先先考虑考虑这个异常获取了以后再去拼出来这个肉,嗯,首先如何去拿到异常方法呢?是M获取一下它的异常是不是自然而然的就想到叫exception啊,那就是exception types异常roses呢也可以写多个,所以呢,它也是一个数组。这个。那那下边跟我们刚才有点类似了,这有点变历是吧,那有变历,那我们这呢,这这呢还是这样写说如果呢,嗯,判断一下当前我们这个异常这个数组啊,如果你要是个no啊,那就是你没有这个异常啊,当然也有可能你这个不是no,它的length呢是零,都代表着是没有异常的意思,没有异常那就没啥可说的了,所以我们这呢,不考虑它啊,这种情况我们就来一个非非呢,表示就是你有异常,你要是有异常一上来的话呢,咱们先给它。
15:31
切一个肉。嗯,这么着配一下,那接下来的话呢,就把你这个异常呢都列出来,写个for啊in那个I哎,小于啊exception text.length哎,佳佳哎就分别呢,把我们的异常呢给它罗列出来就OK了,那这呢,我们就给它print啊,Exception types,它呢具体I这个位置上的异常点盖的一个name获取异常类型,那有可能有多个啊,多个的话是不是又得逗号一下,就跟刚才又一样了。
16:11
跟我们上面说这个行三一样啊,那还是if,如果它,哎等等于它点length减一,这呢就是我们的最后一个来最后一个你光写一个它就行,就不要加这个逗号了。嗯,对,这有个break,嗯。大括号咱就别写了吧,再写有点想哭了是吧,这就不写了啊好这呢,咱们就把这个稍微给他拼了一下啊,抛出的这样的一个异常的情况,咱们这里边呢,还没有抛啥异常,这个display这块我们抛一下吧,就给他硬硬抛的啊,本身人家也没异常啊,嗯,Roses咱们整几个运行使异常吧,哎,整个他的再整一个,比如叫啊class class exception,第一个呢,这是编译异常啊。
17:07
哎,等这把谁俩回过来。方法这块跑一下。哎,看一下哎,关于我们这个display,哎这呢是人家这个参数列表后边roses,哎,Rose这是一个逗号一个,哎这不就两出来了,哎前面诶前面这多了一个,这不合适了,测试的时候发现有点问题是吧。嗯,这个呢,我们写到这儿了,为什么呀。嗯,它是一个nor,或者它长度不等于,诶长度等等于零的时候,Rose。看一下确实都有。
18:01
哎,确实都有,那说明我们这里边进入了啊。那我把这个稍微条件给他改一下吧,我刚才这包的没有问题吧,没问题啊。重构一下,那就相当于什么呢?就是我们这个判断呢,没有把这个没有异常的卡住啊,那我们就直接这样了,说如果啊,如果我们这个exception types,哎,它呢点lengths呢,哎说不等于零,哎或者说准确的讲,你要大于零,这说明这个数组呢是有长度的,你要有长度的话呢,我们就这样做。CTRLC,诶你要是没有长度这块呢,我们,诶或者说其他这个情况啊,哎,我们就不管了。再看。这就没有了,哎,这样呢,我们去改一下啊,把这个位置呢,我们就删掉。
19:01
哎,这样啊。行,那这呢,我们就把这个方法里边的具体的这个结构呢,发现都是可以获取的啊,花的时间比较长,但是呢,总结一下啊,有点无聊是吧?嗯,想说明的问题呢,就是通过反射呢,我们是可以拿到啊,一方面呢所有的方法,另外一方面呢,你方法具体的某一个部分我们都可以做到,其中呢,需要关注的就是关于这个注解啊,哎,我们能拿到注解也要求呢,你这个生命周期要go runtime的,其次呢,在后续咱们框架当中,大家呢会看到,诶我们呢,经常会调一方法这个通过反射哈,拿到一个方法,拿到这个方法以后,我们呢,接着去获取它的注解,看看呢,这个方法,这个注解到底想提供什么样的信息,通过它的Y6呢,诶知道做相应的一些事情。这样,所以呢,咱们在之前讲框架的时候,哎,你没讲过框架哈,咱们这个说注解的时候呢,我提到一个点,说框架呢,其实大家呢,就可以简单的理解为叫注解。
20:02
哎,加上反射。哎,再加上呢叫设计模式,哎,就构成了我们的框架,框架呢就可以看成是这三个部分的一个结合啊,就这样就OK了啊好这呢是我们获取这个方法的这些结构。
我来说两句