**#### JAVA注解
一、定义:注解是元数据的一种形式,它提供关于程序的数据,而这些数据不是程序本身的一部分。注解对于他们标记的代码没有直接影响.
二、用途:
- 编译器可以使用注解来检测错误或隐藏告警
- 可以通过处理注解信息生成代码、XML文件等
- 注解可以在运行时检查
三、注解的声明
注解以 (@) 符号 和 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 {
}
五、预定义注解
-
Java.lang中的预定义注解
- @Deprecated:用于标记已弃用的元素,用此标记的元素不应该在使用
- @Override:用于标记方法是覆盖了父类中的元素,主要是用于防止错误,避免因一些错误而无法正确覆盖父类中的方法。
- @SuppressWarnings:用来抑制告警,"deprecation" 和 "unchecked"两种类别。
-
Java.lang.annotation中的预定义注解
-
@Retention:与哦你过来标记注解的生命周期
- RetentionPolicy.SOURCE:只在保留在源码级别
- RetentionPolicy.CLASS:只在编译时保留
- RetentionPolicy.RUNTIME:由JVM保留,运行时可以使用
-
@Target:限制注解可以用来标记哪些元素
- ElementType.ANNOTATION_TYPE:可以应用于注解
- ElementType.CONSTRUCTOR:可以应用于构在函数
- ElementType.FIELD:可以应用于字段或属性
- ElementType.LOCAL_VARIABLE:可以应用于局部变量
- ElementType.METHOD:可以应用于方法
- ElementType.PACKAGE:可以应用于包
- ElementType.PARAMETER:可以应用于方法的参数
- ElementType.TYPE:可以应用于类、接口、枚举声明
- ElementType.TYPE_USE:用于声明类型注解
-
@Inherited:标记注视可以继承
-
@Repeatable:可重复注解,如果一个元素需要使用两次相同的注解,需要先对注解进行@Repeatable(Class)标记
-
@Document:可以让注解信息生成在Doc文档中
-
六:类型注解
@NonNull String str;
如上所示,可以帮我们检查值是否会被赋null,这种注解称为类型注解,可以直接使用第三方框架 Checker Framework**