![](https://csdnimg.cn/release/download_crawler_static/87642742/bg4.jpg)
METHOD, /* 方法声明 */
PARAMETER, /* 参数声明 */
CONSTRUCTOR, /* 构造方法声明 */
LOCAL_VARIABLE, /* 局部变量声明 */
ANNOTATION_TYPE, /* 注释类型声明 */
PACKAGE /* 包声明 */
}
(03) RetentionPolicy.java
package java.lang.annotation;
public enum RetentionPolicy {
SOURCE, /* Annotation 信息仅存在于编译器处理期间,编译器处理完之
后就没有该 Annotation 信息了 */
CLASS, /* 编译器将 Annotation 存储于类对应的.class 文件中。默认行
为 */
RUNTIME /* 编译器将 Annotation 存储于 class 文件中,并且可由 JVM
读入 */
}
说明:
(01) Annotation 就是个接口。
“每 1 个 Annotation” 都与 “1 个 RetentionPolicy”关联,并且与 “1~n
个 ElementType”关联。可以通俗的理解为:每 1 个 Annotation 对象,都会有
唯一的 RetentionPolicy 属性;至于 ElementType 属性,则有 1~n 个。
(02) ElementType 是 Enum 枚举类型,它用来指定 Annotation 的类型。
“每 1 个 Annotation” 都与 “1~n 个 ElementType”关联。当 Annotation
与某个 ElementType 关联时,就意味着:Annotation 有了某种用途。
例如,若一个 Annotation 对象是 METHOD 类型,则该 Annotation 只能用来修饰
方法。
(03) RetentionPolicy 是 Enum 枚举类型,它用来指定 Annotation 的策略。通
俗点说,就是不同 RetentionPolicy 类型的 Annotation 的作用域不同。
“每 1 个 Annotation” 都与 “1 个 RetentionPolicy”关联。
a) 若 Annotation 的类型为 SOURCE,则意味着:Annotation 仅存在于编译器
处理期间,编译器处理完之后,该 Annotation 就没用了。
例如,“ @Override ”标志就是一个 Annotation。当它修饰一个方法的时
候,就意味着该方法覆盖父类的方法;并且在编译期间会进行语法检查!编译