当前位置: 首页 > article >正文

【Java 基础】15 注解

文章目录

    • 1.什么是注解
    • 2.元注解
      • 1)定义
      • 2)分类
    • 3.内置注解
    • 4.自定义注解
    • 5.注解的基本语法
    • 6.验证注解是否生效
    • 7.注解的使用场景
    • 8.注解的注意事项
    • 结语

1.什么是注解

注解(Annotation)可以理解成一种特殊的 “注释”

注解定义时以 @ 符号开头,可以写在构造方法方法字段等元素上,为这些元素提供额外的信息。

如下图: 我们为实体类 User 添加了 两个 Lombok 的注解,用以为属性增加 setget 方法
在这里插入图片描述

2.元注解

1)定义

元注解(meta-annotation)是用于注解其他注解的注解

这个听起来或许有一点绕,这些是注解的基础,它们用于提供注解拥有哪些行为信息

如下图:Lombok 在定义 Getter 的时候,使用了两个元注解 @Target 和 @Retention
在这里插入图片描述

2)分类

在这里插入图片描述

  1. @Target 用于指定注解可以应用的程序元素类型,包括 TYPE(类、接口、枚举)、FIELD(字段)、METHOD(方法)等。如果没有 @Target 注解,注解可以应用于任何程序元素。

    @Target(ElementType.TYPE)
    public @interface DemoAnnotation {
        // 注解的定义
    }
    
  2. @Retention 用于指定注解的生命周期,即注解在何时有效。可以有三个值:SOURCE(源代码时有效)、CLASS(编译时有效,默认值)、RUNTIME(运行时有效),90% 使用的都是 RUNTIME

    @Retention(RetentionPolicy.RUNTIME)
    public @interface DemoAnnotation {
        // 注解的定义
    }
    
  3. @Documented 用于指定注解是否包含在 Javadoc 文档中。如果一个注解使用了 @Documented,那么它将会被包含在生成的文档中。

    @Documented
    public @interface DemoAnnotation {
        // 注解的定义
    }
    
  4. @Inherited 用于指定一个注解是否具有继承性。如果一个类使用了带有 @Inherited 的注解,并且其子类没有使用相同的注解,那么子类将继承父类的注解。

    @Inherited
    public @interface DemoAnnotation {
        // 注解的定义
    }
    
  5. @Repeatable 用于指定注解是否可以重复应用于同一程序元素。如果一个注解使用了 @Repeatable,则可以在同一程序元素上多次使用该注解。

    @Repeatable(MyAnnotations.class)
    public @interface MyAnnotation {
        // 注解的定义
    }
    
    public @interface MyAnnotations {
        MyAnnotation[] value();
    }
    

上述元注解用于控制注解的行为,提供了更多的灵活性和可定制性。这些元注解的组合使得我们可以更加精细地定义和使用注解,以满足不同的需求。

3.内置注解

Java 提供了一些内置的注解,它们具有特殊的含义和用途。其中几个常用的内置注解包括:

  • @Override 用于标记一个方法是覆盖父类的方法。
  • @Deprecated 用于标记已经过时的方法等,提醒开发者不再使用。
  • @SuppressWarnings 用于抑制编译器警告

4.自定义注解

除了使用内置注解,我们还可以定义自己的注解。自定义注解使用 @interface 关键字,并且可以定义元素(成员变量等)。

例如:

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface ClassInfoAnnotation {
    String author();
    String version() default "1.0.0";
    String description();
}

上述代码定义了一个名为 ClassInfoAnnotation 的注解,它有三个元素:authorversiondescription

5.注解的基本语法

@interface 注解名 {

}

示例代码:这里使用上一步自定义的注解

@ClassInfoAnnotation(author = "Cheney", description = "This class is Hello")
class Test {
    public void sayHello(){
        System.out.println("hello");
    }
}

Test 类上应用了 ClassInfoAnnotation 这个注解,并为元素 authordescription 赋了值,version 使用默认值。

6.验证注解是否生效

在上面两个步骤中,我们定义了一个自己的注解 ClassInfoAnnotation,也在 Test 类上应用了,那么这个注解是否生效了呢?是否可以帮助我们做一些事情呢?

例如:打印类的信息(author,version,description)

示例代码:

    public static void main(String[] args) {
        // 获取类上的注解
        ClassInfoAnnotation anno = Test.class.getAnnotation(ClassInfoAnnotation.class);
        // 打印注解信息
        System.out.println("Author: " + anno.author());
        System.out.println("Version: " + anno.version());
        System.out.println("Description: " + anno.description());
    }

输出结果:

Author: Cheney
Version: 1.0.0
Description: This class is Hello

7.注解的使用场景

  • 文档生成: 注解可以用于生成文档,例如 Java 中的 Javadoc 工具。
  • 编译时检查: 注解可以用于在编译时进行静态检查,提供更严格的类型检查。
  • 运行时处理: 注解可以在运行时通过反射进行处理,实现动态操作。
  • 代码分析工具: 注解可以被代码分析工具用来检查和验证代码。
  • 框架和库: 许多框架和库使用注解来配置和扩展功能,例如 Spring 框架中的注解驱动开发。

8.注解的注意事项

  • 注解本身并不影响程序的实际逻辑,它只是提供了一些额外的元数据信息。
  • 注解可以包含元素,元素的值可以是基本类型、字符串、枚举、注解或以上类型的数组。
  • 注解的使用需要通过反射或其他工具进行处理。
  • 注解的定义和使用应遵循一定的规范和命名规则。

结语

Java 注解是一种强大的元数据机制,它在代码中提供了一种轻量级的、结构化的方式来添加额外的信息。通过合理地使用注解,开发者可以提高代码的可读性、可维护性,并在一些特定场景中实现更加灵活和强大的功能。


http://www.kler.cn/a/156063.html

相关文章:

  • Socket 编程中的 epoll 与红黑树:高效网络编程的关键
  • [面试]Mysql的锁机制
  • VS code 远程连接到docker容器
  • 软件测试基础二十(接口测试 Postman)
  • Golang | Leetcode Golang题解之第552题学生出勤记录II
  • 如何不封禁UDP协议同时防止UDP攻击
  • 汇编学习记录
  • 常用数据预处理方法 python
  • 前缀和列题AcWing795
  • 本地缓存和分布式缓存
  • 冗余链路和生成树协议
  • 【Java 基础】18 I/O流
  • Spring Boot 集成 spring security 01
  • 【网络安全】下载并安装 kali 的虚拟机 版本
  • 总结1073
  • 【LangChain实战】开源模型学习(1)-ChatGLM2-6B
  • 【扫雷】C语言实现扫雷小游戏
  • Java面试题(每天10题)-------连载(41)
  • 后端返回图片流前端展示图片
  • git stash save untracked not staged
  • TCP 基本认识
  • [WP] ISCTF2023 Web 部分题解
  • Amazon CodeWhisperer 使用体验
  • 6-55.汽车类的继承
  • Cmkae外部依赖管理
  • qt5.15播放音频示例(4种方法)