Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。
Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。
从 Java 7 开始,额外添加了 3 个注解:
(1) 1 个 Annotation 和 1 个 RetentionPolicy 关联。
可以理解为:每1个Annotation对象,都会有唯一的RetentionPolicy属性。 (2) 1 个 Annotation 和 1~n 个 ElementType 关联。
可以理解为:对于每 1 个 Annotation 对象,可以有若干个 ElementType 属性。
(3) Annotation 有许多实现类,包括:Deprecated, Documented, Inherited, Override 等等。
Annotation 的每一个实现类,都 "和 1 个 RetentionPolicy 关联" 并且 " 和 1~n 个 ElementType 关联"。
public class test1 {
public static void main(String[] args) {
test();
}
// @Override 重写的注解
@Override
public String toString(){
return super.toString();
}
// @Deprecated 不推荐程序员使用这个方法,但是可以使用,或者存在更好的方式
@Deprecated
public static void test(){
System.out.println("hha");
}
// @SuppressWarnings 消除警告
@SuppressWarnings("all")
public void test2(){
List list = new ArrayList();
}
}
@MyAnnotation
public class test2 {
@MyAnnotation
public void test(){}
}
//Target 表示注解可以用在哪个地方
@Target({ElementType.METHOD,ElementType.TYPE})
//Retention 表示我们的注解保存在什么级别
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{}
public enum ElementType {
TYPE, /* 类、接口(包括注释类型)或枚举声明 */
FIELD, /* 字段声明(包括枚举常量) */
METHOD, /* 方法声明 */
PARAMETER, /* 参数声明 */
CONSTRUCTOR, /* 构造方法声明 */
LOCAL_VARIABLE, /* 局部变量声明 */
ANNOTATION_TYPE, /* 注释类型声明 */
PACKAGE /* 包声明 */
}
public enum RetentionPolicy {
SOURCE, /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了 */
CLASS, /* 编译器将Annotation存储于类对应的.class文件中。默认行为 */
RUNTIME /* 编译器将Annotation存储于class文件中,并且可由JVM读入 */
}