注解是放在Java源码的类、方法、字段、参数前的一种特殊”注释”。
注解则可以被编译器打包进入class文件,因此,注解是一种用作标注的“元数据”。
三类注解
- 由编译器使用的注解
- SOURCE 类型
- @Override:让编译器检查该方法是否正确地实现了覆写
- @SuppressWarnings:告诉编译器忽略此处代码产生的警告
- 这类注解不会被编译进入.class文件
- 由工具处理.class文件使用的注解
- CLASS 类型
- 这类注解会被编译进入.class文件,但加载结束后并不会存在于内存中。这类注解只被一些底层库使用,一般我们不必自己处理。
- 程序运行期能够读取的注解
元注解
元注解: 用来修饰其他注解的注解
- @Target(ElementType)
- 定义 该注解 能够被应用于源码的哪些位置:
- 类或接口:ElementType.TYPE
- 字段:ElementType.FIELD
- 方法:ElementType.METHOD
- 构造方法:ElementType.CONSTRUCTOR
- 方法参数:ElementType.PARAMETER
- 定义 该注解 能够被应用于源码的哪些位置:
- @Retention(RetentionPolicy)
- 定义了 该注解 的生命周期
- 仅编译期:RetentionPolicy.SOURCE
- 仅class文件:RetentionPolicy.CLASS
- 运行期:RetentionPolicy.RUNTIME
- 定义了 该注解 的生命周期
- @Repeatable(Class 该注解的类)
- 定义 该注解 是否可重复
@Inherited()
判断注解是否存在
- Class.isAnnotationPresent(Class)
- Field.isAnnotationPresent(Class)
- Method.isAnnotationPresent(Class)
- Constructor.isAnnotationPresent(Class)
- 获得注解
- Class.getAnnotation(Class)
- Field.getAnnotation(Class)
- Method.getAnnotation(Class)
- Constructor.getAnnotation(Class)