00:00
好,那这个说完以后,那我们接着再讲的话呢,就是第三个事情,第三个事情呢,我们就来谈一谈如何自定义主解。哎,如何呢,自定义注解,咱们Java呢,其实它具有很强的这个扩展性。你会发现呢,我们很多结构呢,都是可以自定义的类,你可以自定义,接口呢,提供了很多现成的,你也可以自定义啊,抛了一些异常,你可以用现成的给他异常你要不满意呢,你可以自定异常这块注解,注解呢你可以用现成的,不满意呢,你可以再定义呃自己的这样的这个注解啊等等,那体现了就是它这个更好的这种可扩展的这个特性啊,那么如何去定义注解,在咱们这个,呃,Java基础这个层面呢,其实这块呢要求不是特别高。那后边呢,咱们用注解呢,其实也基本上用的都是一些给我们框架中提供现成的一些注解,人家都写好了,咱们去用更多呢,咱们主要还是体现为去用现成的这个自定义的,这种情况呢,出现的比较少,但是呢,既然讲到注解,咱们也稍微谈一谈怎么去定义啊,那么怎么定义这块呢,比较直接,大家呢就参照这个surprise warming去定义就可以了。
01:21
嗯,这个我在这儿写吧。参照我们这个surprise warming去定义,它,怎么定义咱就怎么定义。好,首先嗯,我们呢,先去new一个,这呢叫class,你也找不到叫ation,其实呢,点开以后在这呢有个叫ation。你会看到呢,它跟我们这个innu啊,接口啊,是并列的结构啊,这上叫个注解不妨呢,我起个名字就叫做my no。OK,你会看到我们这个注解呢,他的声明的。
02:00
这个算是要类型一样啊,叫char interface。跟interface接口没有任何关系。啊,就是一个固定的结构,也就意味着我们注解需要呢,是用它来声明。在这呢写一下,相当于是这个第一步注解声明为。啊,生命为是这个叫圈interface,你会看到我们这个wing呢,它也是这样的啊,就像一个类一样,接下来一对大括号,这个大括号里边这个内容呢,非常的简洁,你说这是方法呀,还是属性啊。像方法还是像属性,懵了,有小括号,是不是像方法呀,对,像方法,但是呢,你注意这是属性,嗯,就是说之前有的同学发现这就是个圈套是吧?嗯,为啥呢,说它是属性,你看我们在用的时候呢,咱这块呢,这不都是通过这样的方式,这就是你这个Y6的值哈,你看这你就知道了,它其实就是属性了,所以我们在这呢,你看我有这样的说明。
03:19
在这有这个说明,说呢这个a notation,它的乘员变量,看这提到叫成员变量了,那它呢,是以这个无参数方法的形式呢来声明的,你看到呢,像是个方法,但其实它是乘以变量啊,这个方法啊,你要把它看成一个方法的话呢,这个方法的名字和返回值就定义了该成员的名字和类型。啊,看着像方法,其实是成现变量,那么这个类型可以是哪些类型呢?说八种基本数据类型,String class innu notation等等都可以,以及呢,这些类型对应的是这种数组格式的都行,也就是说你可以用这个string的数组,那其实基本上什么都行了,那它有这个大class类类型,大class呢,就是任何一个类呢都可以充当的一种形式了,啊其实这块呢,就很丰富了,没有任何的额外要求,说呢,如果你要只有一个成员变量。
04:18
啊,成员的话呢,建议呢,我们这个参数名呢,就用VALUE6了,所以我们会看到人家这块呢,也通常都用的是VALUE6,啊这呢是一个数组,那就定义数组,说呢,你要是还有一些默认的值,那你就用这个default,哎,去设置一个默认值,基本上我们就看清楚了,好,那回过来咱们定义一下,比如这呢叫my notation里边呢,我就定义一个,比如说词缀类型的,我就定义一个了,哎,我叫Y6,注意加上小括号完事。我们自定义注解呢,就搞定了,好像这个太简单了,也是吧,它的重心其实不是在你定义,而是在你想怎么用,其实是啊,这个呢就定义好了,如果你要说我们这个像surprisew一样呢,说回头用的时候可以指定多个Y6的值,那就定义成数组,我这呢没有,我就光写成一个四针na。
05:12
嗯,那定义好以后呢,我们就可以去用了,在哪用呢?比如说咱们下边有一个person person这块呢,我们就可以圈一个叫my notation这样。写完以后呢,你发现诶报错了,因为呢,我们这个慢呢,咱们里边有个成现变量叫做value,这个value呢,你必须呢,得给指定一个值,哎,你看我这时候Y6通过这种等号的方式呢,去指定,比如我这写个hello。嗯,这块呢,目前咱们还不去指定一些所谓特别有意义的一些事儿了啊,咱们先体会一下基本的一个使用这个哈,这呢就不报错了,相当于呢,我们这块呢,有点像一个对象的一个类的实例一样啊,这块呢,指定一下你这个成现变量了,这个呢是一定要有值的,这个一定要有值哈,但是你可能也会发现呢。
06:05
这种就没纸,你看是吧,它就没有纸啊,它里边的话呢,长什么样呢,这个呢是一个比较特别的注解。像这种呢,什么也没有的,没有成员的,我们把它称作是一种标记,它就是一个标记,所以呢,这里边他啥也没有了,但咱这个有,咱这个有的话呢,我们说呢,就得有值,没有值的话呢,就刚才看到报错了,但是呢,你也可以怎么着呢,哎,也可以这样子,我们这个my notation,我们可以去指定一个叫默认值,使用这个default,哎,比如说默认值呢,我就叫做hello。这块洗完以后,你再回到咱们这个测试,这也就不报错了。其实呢,Y6也有值,只不过呢,使用的是你这个默认值。你要对这个默认值呢,不满意,你再改成比如说这个啊来个什么呢,嗯,嗨一下是吧。
07:04
嗯,暂时呢,咱们先先不说这个使用的事儿啊,一会再说,哎,我们呢,就给大家改了一个新的值啊,仅此而已,所以呢,上面咱们说一下第一个呢,注解生命成它,然后呢,第二个啊,内部啊去定义这个叫成员啊,这个通常啊,这个使用这个value啊,它呢去表示,哎这是第二个事儿,然后第三个呢,哎,可以指定这个成员的这个默认值,这个呢是使用default来定义。哎,这来定义,嗯,这是我们说的这个事情,那嗯还提到了一个四,嗯说如果这个自定义的注解,哎这个它呢,没有这个成员,哎那么表明是一个哎标识作用。后边呢,咱们也会见到一些接口,这些接口呢,也没有抽样方法,就是接口里边什么也没有。
08:07
啊,Shift,比如说咱们到这个啊,这个我们。你看这样sirable呢,你打开你看这个接口里边什么也没有,像这种的接口,我们也认为它是一个标识接口啊,类似的这样的一个概念啊,啊就是一个标识的作用成,那么我们定义好这个注解以后,我们在用的时候呢,呃,你要是有这个成员,我们需要指定它的值啊,这是要注意的啊,就是在使用这个,我们写到后边这吧,说如果这个注解有成员啊,那么在使用注解时,呃,需要指名这个成员的这个值,相当于你需要给这个成员赋值,但是呢,你要是有默认值了,那就不用了啊嗯,这呢,咱们就说了,如何去自定义注解这个问题呢就讲了。
我来说两句