1. 首先来看元注解@Target
定义注解可使用的范围
有哪些范围呢?
TYPE, //用在类上
FIELD, //字段
METHOD, //方法
PARAMETER, //参数
CONSTRUCTOR, //构造方法
LOCAL_VARIABLE, //局部变量
ANNOTATION_TYPE, //注解
PACKAGE, //包
TYPE_PARAMETER, //形参
TYPE_USE //任何地方 不使用@Target默认是这个
示例一:定义了只能用在字段上
用在字段上没报错,用在了类上报错了
示例二:定义在类上使用
类上的正常,字段上的报错了
2.@Retention
定义注解的生命周期(存在的范围)
一共有三个
SOURCE //源文件
CLASS //字节码
RUNTIME //运行时
这里只先证明SOURCE和CLASS,后面证明需要用到反射,等后面就会发出来
这里我们用一个java反编译工具
把MyAnnotationTest字节码直接拖出来,发现没有注解
证明CLASS
更改生命周期为CLASS
再把字节码拖进去看看,发现有注解了
3.@Documented
这个需要导出文档就不演示了,导出文档已经写了一篇文章了
4.@Inherited
使用@Inherited定义的注解具备继承性
什么意思?
A类写的注解,B类都会继承
如何证明?
要用反射,后面写反射会讲
@Inherited
//这里
class A{}
class B extends A{}