基本Annotation
@Override ,它强制一个子类必须覆盖父类的方法,它只能作用于方法,不能作用于其他程序元素。
@Deprecated 用于表示某个程序元素(类、方法)已过时。
@SuppressWarnings 指示该Annotation修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,它会一直作用于改程序元素的所有子元素。在括号内 使用name=value的形式为该Annotation的成员变量设置值,如@SuppressWarnings(value="unchecked")。
堆污染,当把一个不带泛型的对象覆盖一个带泛型的变量时,往往发生堆污染
@SafeVarargs 修饰引发该警告的方法或构造器。
元Annotation ,java.lang.annotation包下,只用来修饰Annotation
@Retention 只能用于修饰一个Annotation定义,用于指定修饰的Annotation可以保留多长时间,该value成员变量的值只能是如下3个:
RetentionPolicy.CLASS 编译器把Annotation记录在class文件中。当运行Java程序时,JVM不再保留Annotation。默认值
RetentionPolicy.RUNTIME 当运行Java程序时,JVM也会保留Annotation,程序可以通过反射获取该Annotation
RetentionPolicy.SOURCE Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
比如:@RetentionPolicy(RetentionPolicy.RUNTIME),当其成员变量为value时,程序中可以直接在括号里指定该成员变量的值。
@Target 它用于指定被修饰的Annotation能用于修饰那些程序单元。
ElementType.ANNOTATION_TYPE
ElementType.CONSTRUCTOR
ElementType.FIELD
ElementType.LOCAL_VARIABLE
ElementType.METHOD
ElementType.PACKAGE
ElementType.PARAMETER
ElementType.TYPE
@Documented 将被javadoc工具提取成文档,所有使用该Annotation修饰的程序元素的API文档里将会包含该Annotation说明
@Inherited 表示被修饰的Annotation具有继承性
自定义Annotation
使用@interface关键字,默认情况下可以修饰任何程序元素。Annotation的成员变量在Annotation定义中以无形参的方法形这一式来声明。一旦在Annotation里定义了成员变量之后,使用该Annotation时就应该为该Annotation的成员变量指定值。指定成员变量的初始值可使用default关键字。
分为两类:
标记Annotation:一个没有定义成员变量的Annotation类型被称为标记。这种Annotation仅利用自身的存在与否来为我们提供信息。
元数据Annotation:包含成员变量。