第12章 注解
12.1 基本内置注释
注解Annotation是一种引用数据类型。编译之后也是生成xxx.class文件。
- @Override 注释能实现编译时检查,你可以为你的方法添加该注释,以声明该方法是用于覆盖父类中的方法。如果该方法不是覆盖父类的方法,将会在编译时报错。
- @Deprecated 的作用是对不应该再使用的方法添加注释,当编程人员使用这些方法时,将会在编译时显示提示信息,它与 javadoc 里的 @deprecated 标记有相同的功能。
12.2 自定义注解
12.2.1 语法格式
[修饰符列表] @interface 注解类型名{}
12.2.2 属性
通常可以在注解当中定义属性,并且可以指定默认值。如果一个注解当中有属性,那么必须给属性赋值(除非该属性使用了default指定了默认值)。如果一个注解的属性的名字是value,并且只有一个属性的话,在使用的时候,该属性名可以省略。
注解当中的属性可以是8种基本数据类型和其相应的数组形式、String、Class和枚举类型。
public class ReflectAnnotationTest {
public static void main(String[] args) throws Exception{
Class c = Class.forName("annotation5.MyAnnotationTest");
// 判断类上面是否有@MyAnnotation
if(c.isAnnotationPresent(MyAnnotation.class)){
// 获取该注解对象
MyAnnotation myAnnotation = (MyAnnotation)c.getAnnotation(MyAnnotation.class);
System.out.println("类上面的注解对象" + myAnnotation); // @com.bjpowernode.java.annotation5.MyAnnotation()
// 获取注解对象的属性怎么办?和调接口没区别。
String value = myAnnotation.value();
System.out.println(value);
}
}
}
12.3 元注解
12.3.1 Target
用来标注“注解类型”的“注解”,这个Target注解用来标注“被标注的注解”可以出现在哪些位置上。
- @Target(ElementType.METHOD):表示“被标注的注解”只能出现在方法上。
- @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})表示该注解可以出现在:构造方法上、字段上、局部变量上、方法上、....、类上...
12.3.2 Retention
用来标注“注解类型”的“注解”。这个Retention注解用来标注“被标注的注解”最终保存在哪里。
- @Retention(RetentionPolicy.SOURCE):表示该注解只被保留在java源文件中。
- @Retention(RetentionPolicy.CLASS):表示该注解被保存在class文件中。
- @Retention(RetentionPolicy.RUNTIME):表示该注解被保存在class文件中,并且可以被反射机制所读取。