1.1 解释:
也叫元数据,一种代码级别的说明。与包,类,方法,字段,局部变量,方法参数等。用来对这些元素进行说明。
1.2 作用分类:
- 编写文档:使用javadoc工具生成doc文档。
- 代码分析:通过反射利用注解。
- 编译检查:让编译器实现基本的编译检查。比如Override
1.3 JDK中预定义的注解:
- @Override:标注方法是否继承父类。
- @Deprecated:标注某些元素已过时。
- @SuppressWarnings:压制警告。需要传参,比如
@SuppressWarnings("all")
1.4 自定义注解
格式:
public @interface Xxxx{
...
}
本质:
注解本质上是一个接口,该接口默认继承Annotation接口。
属性:
接口中可以定义的成员方法。 要求:
- 属性返回值类型:基本数据类型,String,枚举,注解,以上类型的数组。
- 每个属性需要赋值: > - 定义了属性的注解,使用时需要赋值或在属性内用default指定值。 > - 若只有一个属性,且属性名为value,则直接定义值即可,比如上面的@suppressWarnings。 > - 数组赋值时,使用{}包裹。
1.5 元注解
解释:定义注解时用于描述注解的注解。
@Target:描述注解能够作用的位置。
- ElementType取值:
- TYPE:作用于类
- METHOD:作用于方法
- FIELD:作用于变量上
@Retention:描述注解被保留的阶段。
- RetentionPolicy取值
- SOURCE:此元素不会保留到class字节码文件中。
- CLASS:此元素会保留到class字节码文件中。
- RUNTIME:此元素保留到class字节码文件中,并被JVM读取到。
@Document:描述注解是否被抽取到api文档中。 @Inherited:描述注解是否被子类继承。
1.6 解析注解
- 获取注解定义位置的对象,(该类的字节码class文件对象;method对象,filed对象)
- 通过getAnnotation获取注解对象。
- 本质是在内存中生成一个该注解接口的子类实现对象。
- 调用注解对象中的抽象方法,获取返回值。