Java 中的注解:类型、用途和示例
已发表: 2022-05-19Java 等编程语言中的注解是指可以与 Java 源代码集成的句法元数据。 可以对Java包、变量、类、参数和方法等各种因素进行注解。 开发人员可以轻松地直接从源文件中读取 Java 注释,就像 Javadoc 标记一样。
Java 注释也可以包含在 Java 编译器的输出 Java 类文件中并从中读取。 这使 Java 虚拟机能够维护注释并在运行时通过反射读取它们。 在 Java 中,可以从现有的元注释构建元注释。
以下是 Java 中注释的一些基础知识:
- 注释总是以“@”开头。 例如:“@override”、“@target”、“@SuppressWarnings”等。
- 注释不会影响已编译程序的行为。
- 注释有助于将元数据与方法、类、变量等程序组件相关联。
- 注释不仅仅是注释,因为它们会影响编译器处理程序的方式。 它们提供有关程序的附加编译器信息,但不是程序本身的一部分。 因此,这些注解不会影响编译程序的执行。
Java 中的注解类型
1. 单值注释
单值注释只允许一种速记形式,因为它们只包含一个成员。 成员必须在注释应用后被赋予一个值。 但是,不需要指定注解的名称。 如果要使用速记,则成员必须具有值。 例如:
@TestAnnotation(“测试”);
2. 完整的注释
完整的注释由各种数据组成,例如数据成员、值、对和名称。

例如:
@TestAnnotation(owner=”Rahul”, value=”Class Geeks”)
从世界顶级大学在线学习软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
3. 重复注释
当注释可以多次应用于单个对象时,它被标记为重复注释。 重复注释使用 java.lang.annotation 包中定义的 @Repeatable 标记指定。 它的 value 字段表示重复注解的容器类型。
容器被定义为一个带有一个包含重复注释数组的值字段的注释。 要构造重复注解,首先创建容器注解,然后将注解类型指定为@Repeatable 注解的输入。
例如:
// 演示可重复注解的 Java 程序
// 导入需要的类
导入 java.lang.annotation.Annotation;
导入 java.lang.annotation.Repeatable;
导入 java.lang.annotation.Retention;
导入 java.lang.annotation.RetentionPolicy;
导入java.lang.reflect.Method;
// 使单词注释可重复
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MyRepeatedAnnos.class)
@interface 词
{
String word() 默认“你好”;
int value() 默认 0;
}
// 创建容器注解
@Retention(RetentionPolicy.RUNTIME)
@interface MyRepeatedAnnos
{
单词[] 值();
}
公共类主要{
// 在 newMethod 上重复单词
@Words(word = “第一”, value = 1)
@Words(word = “第二”, value = 2)
公共静态无效新方法()
{
主 obj = 新的 Main();
尝试 {
类<?> c = obj.getClass();
// 获取 newMethod 的注解
方法 m = c.getMethod(“newMethod”);
// 显示重复的注解
注释 anno
= m.getAnnotation(MyRepeatedAnnos.class);
System.out.println(anno);
}
捕捉(NoSuchMethodException e){
System.out.println(e);
}
}
公共静态无效主要(字符串[]参数){新方法(); }
}
最终输出将是:@MyRepeatedAnnos(value={@Words(value=1, word=”First”), @Words(value=2, word=”Second”)})
探索我们流行的软件工程课程
SL。 不 | 软件开发计划 | |
1 | LJMU & IIITB 计算机科学硕士 | 加州理工学院 CTME 网络安全证书课程 |
2 | 全栈开发训练营 | 区块链中的 PG 程序 |
3 | 软件开发行政研究生课程 - DevOps 专业化 | 查看所有软件工程课程 |
3. 标记注释
标记注释仅用于声明目的。 此注释既不包含任何成员,也不存在任何数据。 它的唯一目的是保持作为注释的存在。 例如:@Override。

4.类型注释
这些注释可以在使用类型的任何地方使用。 例如,我们可以注释一个方法的返回类型。 类型注释使用@Target 注释进行标记。
可以说明类型注释的代码是:
// 导入需要的类
导入 java.lang.annotation.ElementType;
导入 java.lang.annotation.Target;
// 使用目标注解来注解一个类型
@Target(ElementType.TYPE_USE)
// 声明一个简单的类型注解
@interface TypeAnnoDemo{}
// 主类
公共类 GFG {
// 主驱动方法
公共静态无效主要(字符串[]参数){
// 注释字符串的类型
@TypeAnnoDemo String string = “这段代码带有类型注解”;
System.out.println(string);
abc();
}
// 注释函数的返回类型
静态@TypeAnnoDemo int abc() {
System.out.println(“这个函数的返回类型是带注释的”);
返回0;
}
预定义注释的示例
我们前面已经提到过多种预定义注释。 让我们来看看:
1.@覆盖
此标记注释只能用于方法。 任何带有@override 注解的方法都必须取代超类中的另一个方法。 否则,将触发编译时错误。 发生这种情况是因为它必须确保超类实际上被覆盖,而不仅仅是重载。
可以说明覆盖注释的代码是:
// 第一类
类基础
{
公共无效显示()
{
System.out.println(“基础显示()”);
}
公共静态无效主(字符串参数 [])
{
基 t1 = new Derived();
t1.Display();
}
}
// 第 2 类
// 扩展上面的类
类派生扩展基
{
@覆盖
公共无效显示()
{
System.out.println(“派生显示()”);
}
}
2.@目标
它仅用作另一个注释的注释。 @Target 接受一个参数,该参数必须是 ElementType 常量。 参数决定它可以应用于哪些声明。 @Target 注释可以有多个值,而不仅仅是一个奇异值。 但是,如果必须声明多个值,则必须采用大括号的形式,例如:@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE})。
此处可以使用@Retention 注解来确定注解的保留状态。 三个因素会影响 @Retention 注释:
- 源代码:编译器会忽略注释,因为它们通常保留在源代码级别。
- 运行时:在运行时保留。
- 类:注释保持编译时,Java 程序忽略。
3.@继承
此注解只能用于声明目的,因此只影响某些类声明。 一个注释可以取代另一个并继承其属性。 因此,如果子类中缺少特定注释,则可以检查超类。 但是,如果存在注解,它将获得 @Inherited 注解。
例如:
// 第一类
类 DeprecatedTest
{
@已弃用
公共无效显示()
{
System.out.println(“不推荐使用的测试显示()”);
}
}
// 第 2 类
公共类 SuppressWarningTest
{
// 如果我们在注解下面注释,程序会生成
// 警告
@SuppressWarnings({“checked”, “deprecation”})
公共静态无效主(字符串参数 [])
{
DeprecatedTest d1 = new DeprecatedTest();
d1.显示();
}

}
结论
在这里,我们了解了 Java 中的注解。 我们还了解了 Java 中的注释类型及其用途,这可以帮助 Java 开发人员轻松创建健壮且可扩展的程序。
如果您想了解有关 Java 概念的更多信息,upGrad 的与工作相关的软件工程 PG 认证是您全面了解 Java、HTML、JS 等编程语言以及其他软件开发工具和库的最佳选择。
该计划专为希望在该领域获得入门级职位的最后一年学生或失业毕业生而设计。 为期 5 个月的课程涵盖 MERN/Cloud-Native 的专业化,并通过让学生接触 5 个动手项目来帮助他们建立一流的作品集。
所以,别等了。 前往 upGrad 并立即预订您的座位!
什么是 @jsonproperty 注释?
Jsonproperty 注释允许开发人员在序列化和反序列化期间将 JSON 键映射到属性名称。 基于 Java 的默认设置,键在序列化期间映射到 POJO 字段。 Json 注释通过使用指示映射名称的字符串属性来帮助覆盖此默认功能。
什么是休眠注解?
Hibernate Annotations 是另一种在映射对象和关系表时指定元数据的技术。 它们是一种功能强大且相对较新的映射方法,可以用来代替 XML 映射元数据。 使用 hibernate 注释,用户可以将元数据存储在单个 POJO java 文件中,该文件也承载代码,从而有助于更好地理解表结构。
什么是@SuppressWarnings?
@SuppressWarnings 注释将被抑制的警告通知编译器。 通知按名称以字符串形式出现。 它可以用于任何类型的声明。 Java 将警告分为两类,即未检查和已弃用。 当旧代码与基于泛型的代码交互时,会产生未经检查的警告。