一文搞懂什么是“注解”

简介: 一文搞懂什么是“注解”

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,阿里云专家博主,华为云云享专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

1688127426791.jpg

1、什么是注解

注解是一种在代码中添加元数据的方式。它们提供了一种在源代码中添加补充信息的机制,可以用于描述类、方法、字段等程序元素的特性和行为。注解可以在编译时、运行时或者在开发工具中使用,以提供额外的信息和指示。

注解使用特殊的语法来定义,通常以 @ 符号开头,紧跟着注解的名称和一对括号。括号中可以包含一些参数,用于传递额外的信息给注解。

注解在Java中有广泛的应用,例如:

  • @Override 注解用于标记一个方法是覆盖或实现父类或接口中的方法。
  • @Deprecated 注解用于标记一个方法或类已经过时,不推荐使用。
  • @SuppressWarnings 注解用于抑制编译器的警告信息。
  • @Test 注解用于标记一个测试方法。

除了这些内置的注解,Java还提供了自定义注解的能力,开发人员可以根据自己的需求定义和使用注解。自定义注解可以用于编写更加灵活和可读性强的代码,同时也可以与其他工具和框架进行集成,实现更多的功能和自动化的处理。

2、注解的优缺点

注解的优点:

  1. 提供了一种在代码中添加元数据的方式,可以为程序元素(类、方法、字段等)添加额外的信息和指示,增强了代码的可读性和可维护性。

  2. 注解可以在编译时、运行时或者在开发工具中使用,具有灵活性和可扩展性,可以根据不同的需求和场景进行使用和处理。

  3. 注解可以与其他工具和框架进行集成,实现一些自动化的处理,如自动生成代码、配置文件的解析等。

  4. 注解可以用于编写更加简洁和优雅的代码,减少了一些重复性的工作,提高了开发效率。

注解的缺点:

  1. 注解的使用需要一定的学习和了解,对于初学者来说可能会增加一些学习成本。

  2. 注解的滥用可能会导致代码的可读性下降,过多的注解可能会让代码变得冗长和复杂。

  3. 注解的处理可能会引入一些额外的复杂性和性能开销,特别是在运行时进行注解的处理时。

  4. 注解的使用需要遵循一定的规范和约定,否则可能会导致一些潜在的问题和错误。

    2、注解的应用场景

    注解在Java中有广泛的应用场景,以下是一些常见的应用场景:

  5. 标记和配置:注解可以用于标记和配置特定的类、方法、字段等程序元素。例如, @Entity 注解可以标记一个类为实体类, @Autowired 注解可以标记一个字段或构造函数为自动装配的依赖项。

  6. 编译时检查:注解可以用于在编译时进行静态检查,以确保代码的正确性。例如, @Override 注解用于标记一个方法是覆盖或实现父类或接口中的方法,编译器会检查该方法是否正确地覆盖了父类或接口中的方法。

  7. 代码生成:注解可以与代码生成工具结合使用,自动生成一些重复性的代码。例如,使用 @Getter 和 @Setter 注解可以自动生成类的getter和setter方法。

  8. 单元测试:注解可以用于标记测试方法,以便测试框架能够自动识别和执行这些方法。例如,JUnit框架使用 @Test 注解标记测试方法。

  9. 配置文件解析:注解可以用于解析配置文件,将配置文件中的信息映射到相应的类和字段上。例如,Spring框架中的 @Value 注解可以将配置文件中的值注入到类的字段中。

  10. AOP(面向切面编程):注解可以用于实现面向切面编程,对特定的方法或类进行横切关注点的处理。例如,使用 @Transactional 注解可以将事务管理逻辑应用于指定的方法或类。

  11. 文档生成:注解可以用于生成文档,提供额外的说明和描述。例如,使用 @Documented 注解可以将注解的信息包含在生成的文档中

    4、注解的原理

    注解的原理是通过Java的反射机制来实现的。在Java中,反射机制允许程序在运行时动态地获取类的信息,并且可以操作类的字段、方法和构造函数等。

当使用注解时,编译器会将注解的信息保存在编译后的字节码文件中。在程序运行时,通过反射机制可以读取到这些注解,并根据注解的信息来进行相应的处理。

具体地,注解的原理包括以下几个步骤:

  1. 定义注解:使用Java的注解定义语法,定义注解的名称、参数和默认值等信息。
  2. 注解的使用:在程序中使用注解,将注解应用到类、方法、字段等程序元素上,并传递相应的参数值。
  3. 编译器处理:编译器在编译源代码时会扫描注解,并将注解的信息保存到编译后的字节码文件中。
  4. 反射获取注解:在程序运行时,通过反射机制获取类的信息,包括注解的信息。
  5. 处理注解:根据注解的信息,进行相应的处理。这可以是生成额外的代码、执行特定的逻辑或者进行其他操作。

注解的原理使得开发人员可以在代码中添加元数据,并根据这些元数据来进行相应的处理。这种机制使得代码可以更加灵活、可读性更强,并且可以与其他工具和框架进行集成,实现更多的功能和自动化的处理。

5、什么是元注解

元注解是指用于注解其他注解的注解。在Java中,元注解是一种特殊的注解,用于对其他注解进行修饰和控制。元注解可以用于定义自定义注解的行为、作用范围、生命周期等属性。

Java提供了几种元注解,包括:

  1. @Retention:指定注解的生命周期。可选的取值有三种:

    • RetentionPolicy.SOURCE:注解仅在源代码中保留,编译时会被丢弃。
    • RetentionPolicy.CLASS:注解在编译时被保留,但在运行时不可访问。
    • RetentionPolicy.RUNTIME:注解在运行时保留,可以通过反射机制访问。
  2. @Target:指定注解可以应用的目标元素。可选的取值包括:

    • ElementType.TYPE:类、接口、枚举。
    • ElementType.FIELD:字段。
    • ElementType.METHOD:方法。
    • ElementType.PARAMETER:方法参数。
    • ElementType.CONSTRUCTOR:构造函数。
    • ElementType.LOCAL_VARIABLE:局部变量。
    • ElementType.ANNOTATION_TYPE:注解类型。
    • ElementType.PACKAGE:包。
  3. @Documented:指定注解是否包含在Java文档中。

  4. @Inherited:指定注解是否可以被继承。如果一个注解被@Inherited修饰,那么它将被子类继承。

  5. @Repeatable:指定注解是否可重复应用于同一目标元素。该元注解在Java 8中引入。

元注解的作用是为其他注解提供更多的控制和限制。通过使用元注解,开发人员可以定义自己的注解,并指定它们的作用范围、生命周期和其他属性,从而实现更加灵活和可定制的注解功能。

6、如何实现自定义注解

自定义注解的代码如下:

package com.pany.camp.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 *
 * @description:  自定义注解
 * @copyright: @Copyright (c) 2022 
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0 
 * @createTime: 2023-06-30 20:24
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
   
   
    String value() default "";
    int count() default 0;
}

自定义注解的应用

package com.pany.camp.annotations;

/**
 *
 * @description: 注解的应用
 * @copyright: @Copyright (c) 2022
 * @company: Aiocloud
 * @author: pany
 * @version: 1.0.0
 * @createTime: 2023-06-30 20:24
 */
public class MyClass {
   
   

    @MyAnnotation(value = "Hello", count = 5)
    public void myMethod() {
   
   
        // 方法体
    }

    public static void main(String[] args) throws NoSuchMethodException {
   
   
        MyClass obj = new MyClass();
        Class<?> cls = obj.getClass();
        MyAnnotation annotation = cls.getDeclaredMethod("myMethod").getAnnotation(MyAnnotation.class);
        System.out.println(annotation.value()); // 输出:Hello
        System.out.println(annotation.count()); // 输出:5
    }
}

输出结果如下:

Hello
5

Process finished with exit code 0

7、自定义注解有什么好处

自定义注解有以下几个好处:

  1. 提供额外的元数据:通过自定义注解,可以为代码添加额外的元数据信息。这些信息可以用于描述类、方法、字段等程序元素的特性和行为,提供更多的上下文和指示。

  2. 增加代码可读性和可维护性:通过使用自定义注解,可以使代码更加清晰和易于理解。注解可以提供关于代码意图和用途的信息,使其他开发人员能够更快地理解代码的含义和目的。

  3. 实现编译时检查和验证:自定义注解可以用于实现编译时的检查和验证。通过在注解中定义一些规则和约束,可以在编译阶段对代码进行静态检查,以确保代码的正确性和一致性。

  4. 与其他工具和框架集成:自定义注解可以与其他工具和框架进行集成,以实现更多的功能和自动化的处理。例如,许多框架使用注解来实现依赖注入、持久化、路由等功能。

  5. 简化编码和提高开发效率:通过使用自定义注解,可以简化编码过程并提高开发效率。注解可以自动化一些常见的任务和操作,减少样板代码的编写,从而加快开发速度。

总的来说,自定义注解可以提供更多的元数据和上下文信息,提高代码的可读性、可维护性和可靠性,同时也可以简化开发过程和提高开发效率。
1686494501743.jpg

💕💕 本文由激流原创,原创不易,感谢支持
💕💕喜欢的话记得点赞收藏啊
1687869804912.jpg

目录
相关文章
|
5天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
409 125
|
7天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
696 5
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
5天前
|
缓存 人工智能 运维
阿里云618百炼大模型Qwen3.7-Max功能、免费试用、订阅计费、配置接入详解
Qwen3.7-MAX是阿里云百炼平台推出的通义千问3.7系列旗舰大语言模型,专为智能体时代复杂任务打造,依托阿里云全域算力与自研技术,在逻辑推理、长文本处理、代码工程、长周期自主执行等领域达到行业顶尖水平。2026年618期间,该模型推出多重免费试用权益、按量计费5折、订阅套餐优惠等专属福利,覆盖个人开发者、团队与企业全场景需求,以下从核心功能、免费试用、订阅计费、配置接入四方面展开详细解析。
405 123
|
3天前
|
人工智能 自然语言处理 API
阿里云Token Plan团队版解析:功能、三档套餐与省钱订阅指南
阿里云百炼平台推出的Token Plan团队版,是面向企业与团队的AI大模型订阅服务,以Credits为统一计量单位,整合文本与图像生成模型,提供团队管理、数据安全、多工具兼容等核心能力,解决团队零散订阅AI服务的管理混乱、成本失控、数据安全等痛点。本文将从核心定位、套餐详情、计费规则、团队管理、工具兼容、便宜订阅技巧等方面,全面解析Token Plan团队版,帮助企业与团队高效、低成本地使用AI服务。
302 108
|
4天前
|
存储 人工智能 数据可视化
别再手动复制 Skill 了:多 Agent 时代的 Skill 管理方案
多 Agent 场景下 Skill 的统一管理与同步。
245 126
|
18天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
11天前
|
缓存 人工智能 运维
GLM 5.2自托管全流程实战:硬件选型、vLLM/SGLang部署与成本盈亏测算
2026年智谱发布GLM 5.2超大混合专家模型,区别于以往仅开放API的闭源大模型,该模型权重以MIT开源协议对外发布,企业与开发者可完整下载、本地审计、私有化部署,实现数据不出环境、自定义微调、自主调度推理资源。GLM 5.2拥有753B总参数,原生支持百万级上下文窗口,在代码生成、长文档推理、数学逻辑等多项基准测试中对标国际顶尖商用模型,是首款可完整自托管的前沿代码向大模型。
910 0
|
13天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)