2)一个成员的注解,成员名为value

  可以省略成员名和赋值符号:@Copyright("Right Reserved")

  @Copyright("2011 bookegou.com All Right Reserved")

  3)无成员的注解

  @Override

  @Override

  4)成员为字符串数组的注解

  @SuppressWarnings(value={"unchecked","fallthrough"})

  @SuppressWarnings(value={"unchecked","fallthrough"})

  5)成员为注解数组类型的注解

  @Reviews{@Review(grade=Review.Grade.EXCELLENT,reviewer="df"),

  @Review(grade=Review.Grade.UNSATISFACTORY,reviewer="eg",

  comment="This method needs an @Override annotation")})

  @Reviews{@Review(grade=Review.Grade.EXCELLENT,reviewer="df;),

    @Review(grade=Review.Grade.UNSATISFACTORY,reviewer="eg",

      comment="This method needs an @Override annotation")})

  @Reviews注解拥有一个@Review注解数组类型的成员,@Review注解类型有三个成员,其中reviewer、comment都是String类型,但comment有默认值,grade是枚举类型的成员。

  4、解析注解

  下面是一个解析注解的实例。

public class ParseAnnotation {
 
 public static void main(String[] args) throws Exception{
  final Class cls = Class.forName("com.annotation.TestAnnotation");
  final Method[] method = cls.getMethods();
 
  // 判断是否有指定注解类型的注解
  if(cls.isAnnotationPresent(Description.class)) {
   // 根据注解类型返回指定类型的注解
   Description des = (Description)cls.getAnnotation(Description.class);
   System.out.println("注解描述:" + des.value());
  }
 }
}

  输出结果如下:

  注解描述:使用注解的实例

  前面提到过,注解不会直接影响程序的运行,但是第三方程序或工具可以利用代码中的注解完成特殊的任务,间接控制程序的运行。对于RetentionPolicy.RUNTIME保留期限的注解,我们可以通过反射机制访问类中的注解。

  在JDK5.0里,Package、Class、Constructor、Method以及Field等反射对象都新增了访问注解信息的方法:<T extends Annotation>T getAnnotation(Class<T> annotationClass),该方法支持通过泛型直接返回注解对象。