00014.08 自定义注解和元注解
一、自定义注解 和 元注解是什么?
首先,回顾一下,我们说的一个完整的注解由三部分组成,如下图,实际上我们前面所详细探讨过的,不管是@Override还是@Test都没有要去你声明,仔细想想,我们自己有去声明吗?
系统注解 是JDK帮你声明的
@Test注解是JUnit帮你声明的
还有,读取也不是你来读取的,系统注解像@Override 是编译器帮你读取的,JUnit注解像@Test是@JUnit框架帮你读取的
这次我们所讲的自定义注解和元注解,就需要我们自己去声明、使用、和读取
那么三步我们都给它做了,应该如何做呢?
二、使用
1、注释的声明
语法格式:
[修饰符] @interface 注释名{
}
从语法格式中,我们可以看出,在Java中,是吧注释看成接口的
把枚举看成类
注释的三个完整步骤
(1)声明
(2)使用
(3)读取
那么我们还剩下最后一步,读取
读取不理解,我们想看下元注解是什么说不定就能豁然开朗了
二、元注解
元注解 就是 注解注解的注解
有点绕,自己理解一下,换句话说,就是加在注解上面的注解,叫元注解
1、@Target 元注解
@Target 用于标记这个注解可以用于什么位置
它由ElementType枚举常量对象来决定
例如 TYPE,FIELD,CONSTRUCTOR等10个位置
如果想方法和类都能用要怎么写呢?
2、 @Retention
跟生命周期有关
@Retention 是标记这个注解可以滞留到什么阶段
它由 RetentionPolicy的3个常量对象来指定
SOURCE,CLASS,RUNTIME
SOURCE : 源代码阶段.java ————只能被编译器读取
CLASS : 字节码阶段 ————
RUNTIME : 运行时阶段,运行JVM ——
3、@Documented
标记某个注解是否可以被javadoc.exe读取到API
4、@Inherited
标记这个注解是否可以被子类继承
总结
@Target 、 @Retention是重点