java注解

6 阅读2分钟

**#### JAVA注解

一、定义:注解是元数据的一种形式,它提供关于程序的数据,而这些数据不是程序本身的一部分。注解对于他们标记的代码没有直接影响.

二、用途:

  1. 编译器可以使用注解来检测错误或隐藏告警
  2. 可以通过处理注解信息生成代码、XML文件等
  3. 注解可以在运行时检查

三、注解的声明

注解以 (@) 符号 和 interface 关键字声明

注解中可以包含元素声明,但是它们更像是方法,并且可以定义默认值(default)

@interface ClassPreamble {
  String author();
  String date();
  int currentRevision() default 1;
  String lastModified() default "N/A";
  String lastModifiedBy() default "N/A";
  String[] reviewers();
}

四、注解的使用

通过@AnnotationType来使用注解

如果注解中没有定义元素,可以省略(), 例 @Override

如果注解中只定义了一个元素,并且元素名为value,使用时可以直接写值而不使用名称

例:@SuppressWarnings(value = "unchecked") => @SuppressWarning("unchecked")

没有设置默认值的元素不能省略赋值

如果声明的元素是数组,并且数组中只有一个元素,可以省略{}. 例下面代码中: reviewers = "Alice"

@ClassPreamble(
  author = "John Doe",
  date = "1/22/2026",
  reviewers = {"Alice", "Bob", "Cindy"}
)
public class GenerationList {
​
}

五、预定义注解

  1. Java.lang中的预定义注解

    1. @Deprecated:用于标记已弃用的元素,用此标记的元素不应该在使用
    2. @Override:用于标记方法是覆盖了父类中的元素,主要是用于防止错误,避免因一些错误而无法正确覆盖父类中的方法。
    3. @SuppressWarnings:用来抑制告警,"deprecation" 和 "unchecked"两种类别。
  2. Java.lang.annotation中的预定义注解

    1. @Retention:与哦你过来标记注解的生命周期

      1. RetentionPolicy.SOURCE:只在保留在源码级别
      2. RetentionPolicy.CLASS:只在编译时保留
      3. RetentionPolicy.RUNTIME:由JVM保留,运行时可以使用
    2. @Target:限制注解可以用来标记哪些元素

      1. ElementType.ANNOTATION_TYPE:可以应用于注解
      2. ElementType.CONSTRUCTOR:可以应用于构在函数
      3. ElementType.FIELD:可以应用于字段或属性
      4. ElementType.LOCAL_VARIABLE:可以应用于局部变量
      5. ElementType.METHOD:可以应用于方法
      6. ElementType.PACKAGE:可以应用于包
      7. ElementType.PARAMETER:可以应用于方法的参数
      8. ElementType.TYPE:可以应用于类、接口、枚举声明
      9. ElementType.TYPE_USE:用于声明类型注解
    3. @Inherited:标记注视可以继承

    4. @Repeatable:可重复注解,如果一个元素需要使用两次相同的注解,需要先对注解进行@Repeatable(Class)标记

    5. @Document:可以让注解信息生成在Doc文档中

六:类型注解

@NonNull String str;

如上所示,可以帮我们检查值是否会被赋null,这种注解称为类型注解,可以直接使用第三方框架 Checker Framework**