注解使用的开始版本为Java SE 5.0
元注解:注解的注解。个人理解为自己所定义的注解的属性。
@Retention
retention英文意味保留期。注解的释义为注解的存活时间。个人理解为:自己定义的注解所能存活的地点(源码、Class文件、JVM)。
取值为:
- RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
- RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
- RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
@Documented
它的作用是能够将注解中的元素包含到 Javadoc 中去
@Target
标明所定义的注解所能修饰的范围,比如:类、构造方法、参数等
- ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
- ElementType.CONSTRUCTOR 可以给构造方法进行注解
- ElementType.FIELD 可以给属性进行注解
- ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
- ElementType.METHOD 可以给方法进行注解
- ElementType.PACKAGE 可以给一个包进行注解
- ElementType.PARAMETER 可以给一个方法内的参数进行注解
- ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
@Inherited
继承,可继承的。所定义的注解用@Inherited所标注后,这个注解所修饰的类被继承,则其子类也会有该注解的功能,即子类也会被该注解标注(自动的)。
@Repeatable(该元注解为java 1.8 加入)
重复,可重复的。使用@Repeatable标注的注解,表明在一个使用范围上该注解可以多次使用,比如角色注解@role被元注解@Repeatable所修饰,一个person的class被@role所标注,但是一个person可以有多个role,所以person的class可以被标注多次。
@role(name="教师") @role(name="医生") @role(name="学生") class person{ }