一、注解(Annotation)概述
- 从JDK 5.0开始, Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)
- Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理.通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息.
- Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的"name=value"对中.
- Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据
二、JDK内置的基本注解类型(3个)
使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。
三个基本的Annotation:
@Override:
限定重写父类方法,该注释只能用于方法@Deprecated:
用于表示某个程序元素(类,方法等)已过时@SuppressWarnings:
抑制编译器警告
三、自定义注解类型
修饰符为:@interface
//自定义的注解
public @interface MyAnnotation {
String value() default "hello";
}
四、JDK的元Annotation(对注解进行注解)(4个)
用于修饰其他Annotation定义
(一)Retention(用来修饰注解的生命周期)
@Rentention包含一个RetentionPolicy类型的成员变量,使用@Rentention时必须为该value成员变量指定值
- RetentionPolicy.SOURCE:编译器直接丢弃这种策略的注释(例如:@SuppressWarnings)
- RetentionPolicy.CLASS:编译器将把注释记录在class 文件中.当运行Java程序时, JVM不会保留注解。这是默认值
- RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中**.当运行Java程序时,JVM会保留注释.程序可以通过反射获取该注释**
(二)Target
@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素. @Target也包含一个名为value的成员变量.
(三)Documented
@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档.
- 定义为Documented的注解必须设置Retention值为RUNTIME。
(四)Inherited
@Inherited:被它修饰的Annotation将具有继承性.如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解,实际应用中,使用较少