【Java】java注解

120 阅读2分钟

1.1 解释:

也叫元数据,一种代码级别的说明。与包,类,方法,字段,局部变量,方法参数等。用来对这些元素进行说明。

1.2 作用分类:

  1. 编写文档:使用javadoc工具生成doc文档。
  2. 代码分析:通过反射利用注解。
  3. 编译检查:让编译器实现基本的编译检查。比如Override

1.3 JDK中预定义的注解:

  1. @Override:标注方法是否继承父类。
  2. @Deprecated:标注某些元素已过时。
  3. @SuppressWarnings:压制警告。需要传参,比如@SuppressWarnings("all")

1.4 自定义注解

格式:

public @interface Xxxx{
    ...
    }

本质:

注解本质上是一个接口,该接口默认继承Annotation接口。

属性:

接口中可以定义的成员方法。 要求:

  1. 属性返回值类型:基本数据类型,String,枚举,注解,以上类型的数组。
  2. 每个属性需要赋值: > - 定义了属性的注解,使用时需要赋值或在属性内用default指定值。 > - 若只有一个属性,且属性名为value,则直接定义值即可,比如上面的@suppressWarnings。 > - 数组赋值时,使用{}包裹。

1.5 元注解

解释:定义注解时用于描述注解的注解。

@Target:描述注解能够作用的位置。

  • ElementType取值:
    • TYPE:作用于类
    • METHOD:作用于方法
    • FIELD:作用于变量上

@Retention:描述注解被保留的阶段。

  • RetentionPolicy取值
    • SOURCE:此元素不会保留到class字节码文件中。
    • CLASS:此元素会保留到class字节码文件中。
    • RUNTIME:此元素保留到class字节码文件中,并被JVM读取到。

@Document:描述注解是否被抽取到api文档中。 @Inherited:描述注解是否被子类继承。

1.6 解析注解

  1. 获取注解定义位置的对象,(该类的字节码class文件对象;method对象,filed对象)
  2. 通过getAnnotation获取注解对象。
    • 本质是在内存中生成一个该注解接口的子类实现对象。
  3. 调用注解对象中的抽象方法,获取返回值。