注解
注解
注解是jdk1.5引入的技术
1.范围
TYPE, 可用于class,interface,Annotation,enum上面
FIELD, 属性上面,即成员变量
METHOD, 方法上面
PARAMETER, 方法的参数前面,比如test(@Nullable String name) 允许这个参数为空
ANNOTATION_TYPE, 注解类型上面
2.元注解
元注解是在我们自定义注解的时候用的,java中就只有四个
-
@Target,用于描述注解的使用范围
-
@Retention,保留策略,决定是保留到源代码中 (SOURCE,在编译完,成为class文件的时候,注解被遗弃)/ Class文件中(CLASS,在class文件中有,但当jvm加载这个class文件之后,就没有了)/ 加载到内存中(RUNTIME,一直存在)
拿SOURCE举个栗子,它对应着编译阶段,@Override用的就是它,所以在编译的时候就会检查此方法是不是重写的
注意,若要用到反射技术,则必须使用RUNTIME,因为它在运行阶段有效
-
@Documented, 使用了该元注解的注解,该注解的信息将会被生成到API帮助文档中
比如我定义了一个注解
@Target(ElementType.METHOD)
@Documented
public @interface MyAnnotation{
String[] value();
int a();
}
然后使用这个注解,该传参的传参
public class AnnotationTest {
@MyAnnotation(value ="tom",a=10)
public void sayHello(){
System.out.println("Hello World!");
}
}
然后利用idea或eclipse生成该java文件的javadoc(就是API帮助文档),如下,注解的信息就出现在了API中
- Inherited, 会被继承, 假如某父类上使用了该注解,那么它的子类也默认使用了该注解
这一路,灯火通明