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

Java-注解

Java 注解(Annotation)是一种用于在 Java 代码中附加元数据的机制。注解本身不会改变程序的行为,但可以被编译器、开发工具、运行时环境等进行处理,从而影响程序的编译过程、文档生成、运行时行为等。

1. 注解的基本定义

注解是一种以 @ 符号开头的标记,后跟注解的名称和可选的参数。比如:

@Override
public String toString() {
    return "Example";
}

@Override 是一个常见的注解,它表示该方法是重写父类方法的。

2. 常见的 Java 注解

Java 提供了几种内置的注解,常见的包括:

  • @Override: 表示方法重写了父类的方法。
  • @Deprecated: 表示该方法、类或字段不推荐使用。
  • @SuppressWarnings: 用于抑制编译器的警告信息。
  • @FunctionalInterface: 用于声明一个接口是函数式接口,即该接口只包含一个抽象方法。

3. 自定义注解

开发者也可以根据需要自定义注解。自定义注解的基本语法如下:

public @interface MyAnnotation {
    String value() default "default value";  // 定义一个默认值
}

使用自定义注解的示例:

@MyAnnotation(value = "Hello")
public void someMethod() {
    // 方法体
}

4. 注解的使用方式

  • 编译时处理(编译时注解):通过编译器检查注解(例如 @Override),如果注解使用不当,编译器会产生警告或错误。
  • 运行时处理(运行时注解):通过反射机制读取注解并根据注解的值执行相关逻辑。例如,在 Spring 框架中,@Autowired 注解用于自动注入依赖对象。

5. 注解的元注解

元注解是用于注解其他注解的注解。Java 提供了几种常用的元注解:

  • @Retention: 指定注解的生命周期,可以是 SOURCE(源码阶段)、CLASS(编译阶段)、RUNTIME(运行时阶段)。
  • @Target: 指定注解的作用范围,例如方法、类、字段等。
  • @Documented: 表示注解会被 javadoc 工具生成文档。
  • @Inherited: 表示注解可以被子类继承。

6. 注解与反射

通过反射机制,Java 程序可以在运行时获取类、方法、字段等的注解信息。示例代码如下:

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyCustomAnnotation {
    String value();
}

class Test {
    @MyCustomAnnotation(value = "Test Method")
    public void myMethod() {
        // 方法体
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        Test test = new Test();
        for (var method : test.getClass().getDeclaredMethods()) {
            if (method.isAnnotationPresent(MyCustomAnnotation.class)) {
                MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class);
                System.out.println("Method " + method.getName() + " has annotation: " + annotation.value());
            }
        }
    }
}

输出:

Method myMethod has annotation: Test Method

总结

Java 注解是一种元数据机制,允许你在代码中附加描述性信息,这些信息可以在编译时、类加载时、运行时由工具或框架进行处理。注解广泛应用于框架(如 Spring、Hibernate)中,帮助简化代码、实现功能自动化。


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

相关文章:

  • 论文笔记(六十一)Implicit Behavioral Cloning
  • Android SDK下载安装(图文详解)
  • C++实现设计模式---原型模式 (Prototype)
  • ASP.NET Core与GraphQL集成
  • 三 BH1750 光感驱动调试1
  • Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】
  • ARM/Linux嵌入式面经(五七):东方微电
  • AIGC魔性视频创作教程,即梦AI、海螺AI、混元大模型、通义万相
  • 低代码/无代码开发平台下的API接口创新实践
  • 请求三方http工具
  • ElasticSearch08-分析器详解
  • SQL 自然连接(Natural Join)详解
  • 物理信息神经网络(PINN)八课时教案
  • 深度学习在日志分析中的应用:智能运维的新前沿
  • C#调用Python脚本的方式(一),以PaddleOCR-GUI为例
  • 【FFmpeg 教程】给视频加字幕
  • 机器学习周报(12.9-12.15)
  • LF CRLF
  • 微积分复习笔记 Calculus Volume 2 - 4.3 Separable Equations
  • go面试问题
  • 利用git上传项目到GitHub
  • CSS 语法
  • 遇到“REMOTE HOST IDENTIFICATION HAS CHANGED!”(远程主机识别已更改)的警告
  • VSCode下的编译、调试、烧录
  • SQL Server 解决游标性能问题的替代方案
  • CSS系列(18)-- 工程化实践详解