00:00
那么接下来第二个呢,叫做。目标啊,这个呢,我们在PPT里边也有这个具体的说明,Target用于修饰anno的定义啊,就是说你是个圆柱解了,它呢用于指定被修饰的not呢,能用于修饰哪些程序元素。啊,就是感觉看着呢,稍微还是有点绕啊,那咱们直接呢来解释,那还是看一下我们的surprise warming,这呢是它的在它这个小括号里边呢,就是它的值,用一个大括号说明了这个T里边定义的其实是个数组。嗯,这个数组的话呢,可以取很多个值,这里边呢,就提到这样一些值,我们点一下这个进来,哎,你看果真是个数组,这个数组呢,是element tap类型啊,这个点开这个类型呢,又是一个枚举类,里边呢定义了很多的对象,那我们分别看一下这每一个对象呢,或者叫常量,它呢是什么意思?
01:00
Tap。嗯,Tap呢,它表示的其实是个class,或者是接口,或者是枚举类,这呢叫做tap,然后field属性方法参数构造器,局部变量是吧?哎,然后注解类型哎包等等等等等。诶看到有这样的一些声明,好,再回到咱们说的这个target,这个target的话呢,咱们呢,声明的是这个叫具体的一些类型,这个呢在咱们刚才surprisewing这块用了,那就是指明我们这个surprisewing它呢可以用来修饰类,接口枚举类。都是他的修饰属性,修饰方法,修饰行参,修饰构造器,修饰局部变量。哎,这不就都是这个意思吗?哎,那么哎,咱们呢,CTRLC一下啊,咱刚才自己定义的这个my notation呢,这呢我什么也没写,其实你什么也没写呢,这块呢,就相当于是我们看在哪都用都可以用啊,你看这个构造器呃类这块,构造器这块,包括方法这块慢用的提看都可以用。
02:11
这相当于没有指定呢,它就没有要求了啊,那现在呢,咱们指定一下我呢在这块CTRLV啊,把刚才STEM中的这个就都粘过来了,粘过来以后呢,这时候就指明咱们的这个注解呢,只能是使用在这些结构的上面,比如说我把这个类呢干掉类或者接口这块啊就给干干掉了,干掉以后呢,你再回到咱们这个测试,这你会发现呢,这块就报错了。因为你这时候去修饰这个类了,咱们这块呢,没有指明说你能修饰这个类,所以他就错了,包括这个构造器,构造器呢也干掉,干掉呢,再回过来构造器这就也报错了。哎,所以这个呢,就是这样一说呢,就更哎明确了,就是它呢,哎,Target就是指明我们所修饰的这个注解,它能够修饰其他的哪些结构。
03:01
哎,就是上面写的这个事情。啊,能用于修饰哪些程序元素啊好这个呢也就过了,那这两个的话呢,通常通常啊,咱们如果要是去定义一个注解的话呢,一般都会去把这两个都用上。哎,这个我们写到这儿吧,哎,我们如果哎定义,哎这个写到这吧。啊,基于这我们来说的啊,那自定义注解,哎,通常呢,诶都会指明,哎两个圆注解啊,一个呢叫做retation,指明你的生命周期,呃,另外一个呢,叫做target,指明呢,你能够用来修饰哪些结构,哎这两个呢是比较常用的,那剩下这两个呢,就相对来讲,出现的这个频率呢,就要低一些啊这呢我拉一条线啊出现的频率较低,就是一般呢,咱们其实都不会去用的啊,但是这块呢,既然你是圆柱解,咱们也说一下,第一个呢叫documented。
04:03
Documented看一下。嗯,就是文档被文档啊,这个意思说用于指定该这个嗯,原annoation它所修饰的noation呢,这个类啊,将被Java dock工具呢,提取是提取成了一个文档。啊,默认情况下呢,这个Java do呢,是不包含注解的,这个呢,诶我们提一下就是咱们呢,在第一天讲hello word的时候说呢,讲过这个Java do解析成一个文档,这个文档里边呢,默认情况下呢,是不包含注解的。哎,是不包含这个注解信息的,但是如果你要是想让它包含也有办法,那呢,就是你把这个注解呢,声明为一个叫documented。哎,先写一下它的意思啊呃,这个呢,呃表示所哎修饰的这个注解呢,啊在被Java dock解析时。
05:06
哎,这个呢,保留下来这呢,就涉涉及到就是默认的时候呢,注解是不保留的,但是你要是加上这个注解呢,诶加上这样的一个圆注解呢,它就保留了,这个呢很好解释,比如说咱们呢,这个呃,见到过一个什么呢,叫过时这个事儿啊control shift t啊叫。哎,Depricate,哎,它这个depric,我们会看到它上面加了一个叫documented。那I呢,就是这个documented,呃,Ped在我们代码当中,如果你用了,用了以后呢,我们要用Java do解析的时候呢,它就会保留下来,比如说ctrl shift t找这个date。Data,这里边我们就会看到有这样一个标识,那因为你这个标识呢,是documented的。所以说呢,我们在生成这个API这个文档的时候呢,你会看到在这个构造器的里边呢,会有这样一个标识,是不是咱们都见过吗。
06:12
这是这个data,然后呢,你看我们这个API里边呢,这都会加上这个D盘K点开,这不关于这样一个标识嘛,这呢就是咱们使用这个文档的时候,这个整个我们这个API呢,其实就是Java do给解析出来的啊,那里边呢,就保留了我们这个叫就是因为呢,你用documented修饰了。能理解是吧。好,这就过了,再接着我们看下一个呢,叫做inheritit。这个inheritit说,它被它修饰的an notation呢,将具有继承性。将具有这个继承性,说如果某个类呢,使用了被inherited所修饰的noation,它的此类呢,将自动的具有该注解就是具有这个继承性了,这个咱们就说一下就行,用的不多啊,举个例子,比如说呢,这个my notation,这呢,我在父类当中声明了my notation了。
07:07
那么此类这个student上面会有吗?目前呢,我们这里边儿没有加这个叫inherited。就没有,你看在我现在我加上啊,现在我加上嗯,加上ctrl shift t啊in啊,直接我就在这写就行啊。Inherited。就他我加上以后表明呢,我们这个这个注解呢,它就具有这个继承性了,然后咱们在这个person上面我写了,接着呢,我就说其实student上面呢,相当于就有。你要是有,你得证明一下,你要是证明,这就涉及到咱们要说的下一个问题。下一个问题,那我们就顺带呢,把这个也解释一下,第五个事儿,哎,那就是通过哎反射来获取,哎获取我们这个注解信息,哎这个呢,咱们其实等到这个反射的时候呢,再系统的去讲啊。
08:14
哎,在系统的讲解,现在呢,咱们就光看一个例子就可以了,光看一个例子这呢,我就不妨写成一个单元测试方法。我们去get一下这个具体的。这么着al enter一下,我们加入一下这个啊。好了,那现在呢,我们想获取这个注解,但你现在获取的话呢,是student这个类上面的注解,所以首先我们先CTRLC找到咱们这个student.class我现在写的是反射的代码,大家呢,先了解一下就行啊,就听个热闹啊,先不用呢去掌握,然后呢,我去先得到咱们对应的这个叫class。哎,我就叫个student class叫它吧,这个泛型没见过,没见过就删掉啊,这是它了,或者你叫一个class也行啊,那得到它以后点二我们呢,去get它的这个具体的annoations。
09:14
就是获取这个类上面的这个注解了,Al enter,因为注解呢可以不止一个,所以我们得到的是一个数组,然后我们下面呢,去遍历一下这个数组。好,我们这呢,去打印一下这个a notation具体的每一个元素,那这样就可以搞定了啊,那么目前呢,目前在这个person上面呢,我们这个magn not呢,加了一个inherited youngg呢,它就具有这个技能性,那回过来我现在呢去执行。好,大家这不就看到了吗?哎,我们呢,这时候去找的这个叫嗯,Student,它上面呢有一个my notation叫做high,其实呢,就是我们复类当中这个,但是如果呢,我要是把这个my notation上面的这个inherition呢干掉,干掉以后呢,我们再来跑。
10:15
那就意味着此时的MY就不再具有这个继承性了,哎,你看就没有了,哎就是这样的一个点啊,这就提到了我们这叫inheritit,它的一个继承性的一个特点,好,那么关于这个,呃,四个圆柱解我们就说完了,这四个圆柱解里边呢,呃,大家要关注的也就是前两个,后边两个呢,了解一下就可以,那顺便呢,咱们也通过反射呢,稍微给大家举了一个简单的例子,只是呢,在咱们这个类上面呢,进行的一个使用啊,然后在这儿呢,上面进行了一个获取啊,那具体关于通过反射如何来获取这个注解,以及呢,如何进行调用,咱们讲到反射这一章的时候呢,再去说,哎这一章呢,反射其实也很重要,当然了,这个也有点难啊,有点难。
我来说两句