public @interface AnnoTest
其中可以定义值, 非标识类的注解都有值。(即 标识类的注解没有值)
@ 只有在反射时才有作用。
定义方法: 数据类型 值的名称();
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE) // 表示该注解能标注在哪些地方
public @interface Retention { // 仅仅针对注解的注解,用以注解策略。
RetentionPolicy value();
}
RetentionPolicy -- 该注解生存周期
CLASS
编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
RUNTIME -- 最重要!!!
编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE
编译器要丢弃的注释。
ElementType -- 该注解能在何处注解
ANNOTATION_TYPE
注释类型声明
CONSTRUCTOR
构造方法声明
FIELD
字段声明(包括枚举常量)
LOCAL_VARIABLE
局部变量声明
METHOD
方法声明
PACKAGE
包声明
PARAMETER
参数声明
TYPE
类、接口(包括注释类型)或枚举声明