1. Target:用来指定这个注释(Annotation)是为哪种类型而定义的。比如,这个类型可能只是为method定义的。比如override,不能用@override来修饰class或者field。
2.Retention:Retention的策略可以从以下三种中选取:- RetentionPolicy.SOURCE:编译器编译之后会会从class file中除去注释(Annotation)。
- Retention.CLASS:注释(Annotation)保留在class file中,但是VM不会处理。
- RetentionPolicy.RUNTIME,:注释(Annotation)保留在class file,VM会进行处理。
请注意,如果你希望在运行时查找到这些注释在什么地方被用到,一定要在定义注释的时候,选择RetentionPolicy.RUNTIME,否则即使你用注释修饰了类变量或者方法,在运行时也没有办法获得这个信息的。
3.Documented:这个注释(Annotation)将作为public API的一部分。
4.Inherited : 假设注释(Annotation)定义的时候使用了Inherited,那么如果这个注释(Annotation)修饰某个class,这个类的子类也被这个注释(Annotation)所修饰。
J2SE的内建注释(build-in annotation)
在程序中不仅可以使用自己定义的注释,还可以使用J2SE5.0中内建的注释类型。下面我们就详细来介绍J2SE5.0提供的注释类型。J2SE 5.0中预定义了三种注释注释类型:
Override :java.lang.Override 表示当前的方法重写了父类的某个方法,如果父类的对应的方法并不存在,将会发生编译错误。
Deprecated:java.lang.Deprecated 表示 并不鼓励使用当前的方法或者域变量。
SuppressWarnings: java.lang.SuppressWarnings关闭编译器告警,这样,在编译1.5之前的代码的时候,不会出现大量不关心的无关的告警
一个最小例子:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface Copyright { String value();
}