注解
作用: 注解(Annotation)相当于⼀种标记,在程序中加⼊注解就等于为程序打上某种标记,以后,javac
编译器、开发⼯具和其他程序可以通过反射来了解你的类及各种元素上有⽆何种 标记,看你的程
序有什么标记,就去⼲相应的事,标记可以加在包、类,属性、⽅法,⽅法的参数以及局部变量
上。
注解的属性:
- 属性的作⽤
可以让⽤户在使⽤注解时传递参数,让注解的功能更加强⼤。 - 属性的格式
格式1:数据类型 属性名();
格式2:数据类型 属性名() default 默认值; - 属性适⽤的数据类型
⼋种基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型,Class类型,枚举类型,注解类型
以上所有类型的⼀维数组。 - 使⽤注意事项:如果属性有默认值,则使⽤注解的时候,这个属性可以不⽤赋值。
如果属性没有默认值,那么在使⽤注解时⼀定要给属性赋值。
元注解
@Target:
可选的参数值在枚举类ElemenetType中包括:
TYPE: ⽤在类,接⼝上
FIELD:⽤在成员变量上
METHOD: ⽤在⽅法上
PARAMETER:⽤在参数上
CONSTRUCTOR:⽤在构造⽅法上
LOCAL_VARIABLE:⽤在局部变量上
@Retention:
可选的参数值在枚举类型RetentionPolicy中包括:
SOURCE:注解只存在于Java源代码中,编译⽣成的字节码⽂件中就不存在了。
CLASS:注解存在于Java源代码、编译以后的字节码⽂件中,运⾏的时候内存中没有,默认
值。
RUNTIME:注解存在于Java源代码中、编译以后的字节码⽂件中、运⾏时内存中,程序可以
通过反射获取该注解。
注解解析
通过Java技术获取注解数据的过程则称为注解解析。
与注解解析相关的接⼝:
Anontation:所有注解类型的公共接⼝,类似所有类的⽗类是Object。
AnnotatedElement:定义了与注解解析相关的⽅法,常⽤⽅法以下四个:
boolean isAnnotationPresent(Class annotationClass); 判断当前对象是否有指定的注
解,有则返回true,否则返回false。 T getAnnotation(Class annotationClass); 获得当前对象上指定的注解对象。
Annotation[] getAnnotations(); 获得当前对象及其从⽗类上继承的所有的注解对象。
Annotation[] getDeclaredAnnotations();获得当前对象上所有的注解对象,不包括⽗类
的。