注解
什么是注解
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
一般分类
1.编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
/**
* @author XXX
* @version xxx
*/
public class XXX{
}
2.代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
3.编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
public class XXX {
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public int hashCode() {
return super.hashCode();
}
}
系统注解
元注解
@Target:表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中
ElemenetType.CONSTRUCTOR----------------------------构造器声明
ElemenetType.FIELD --------------------------------------域声明(包括 enum 实例)
ElemenetType.LOCAL_VARIABLE------------------------- 局部变量声明
ElemenetType.METHOD ----------------------------------方法声明
ElemenetType.PACKAGE --------------------------------- 包声明
ElemenetType.PARAMETER ------------------------------参数声明
ElemenetType.TYPE--------------------------------------- 类,接口(包括注解类型)或enum声明
@Retention:表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中
RetentionPolicy.SOURCE ---------------------------------注解将被编译器丢弃
RetentionPolicy.CLASS -----------------------------------注解在class文件中可用,但会被VM丢弃
RetentionPolicy.RUNTIME VM-------将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
@Documented:将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。
默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中
@Inherited:允许子类继承父类中的注解。
通过对注解上使用元注解Inherited声明出的注解,在使用时用在类上,可以被子类所继承,对属性或方法无效。
标准注解
@Override:对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告。
@Deprecated:对不应该再使用的方法添加注解,当编程人员使用这些方法时,将会在编译时显示提示信息。
@SuppressWarnings("all"):抑制一些能通过编译但是存在有可能运行异常的代码会发出警告。
@SafeVarargs:在JDK7出现的,表示“堆污染”警告;“堆污染”即是将一个不带泛型的变量赋值给一个带泛型的变量,将导致泛型变量污染,如果不加上面注解,编译器将给于提示,避免运行时异常。