温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java注解怎么使用

发布时间:2026-10-22 22:29:05 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

Java 注解(Annotation)是一种元数据机制,用来给代码(类、方法、字段、参数等)添加说明信息,可以被编译器、框架或运行时读取并使用。

下面从 是什么 → 怎么用 → 怎么自定义 → 常见场景 逐步说明。


一、注解的基本使用(使用已有注解)

1️⃣ 常见内置注解

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

常见内置注解:

  • @Override:表示方法重写
  • @Deprecated:表示已过时
  • @SuppressWarnings("unchecked"):抑制警告

2️⃣ 注解可以加在哪里

@MyAnnotation
public class User {

    @MyAnnotation
    private String name;

    @MyAnnotation
    public void hello(@MyAnnotation String msg) {
    }
}

可用于:

  • 类
  • 方法
  • 字段
  • 参数
  • 构造器
  • 局部变量
  • 包

二、定义自己的注解

1️⃣ 基本定义

public @interface MyAnnotation {
}

使用:

@MyAnnotation
public void test() {}

2️⃣ 带参数的注解

public @interface MyAnnotation {
    String value();
    int age() default 18;
}

使用:

@MyAnnotation(value = "tom", age = 20)
public void test() {}

如果只有一个 value():

@MyAnnotation("tom")

3️⃣ 元注解(注解的注解)

@Target:注解能用在哪里

@Target(ElementType.METHOD)

常见取值:

  • TYPE(类)
  • METHOD
  • FIELD
  • PARAMETER

@Retention:注解存活时间

@Retention(RetentionPolicy.RUNTIME)

取值:

  • SOURCE:只存在于源码
  • CLASS:编译期
  • RUNTIME:运行时(最常用)

示例

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String value() default "";
}

三、运行时读取注解(反射)

Method method = obj.getClass().getMethod("test");
if (method.isAnnotationPresent(Log.class)) {
    Log log = method.getAnnotation(Log.class);
    System.out.println(log.value());
}

✅ 只有 @Retention(RUNTIME) 的注解才能被反射读取


四、常见使用场景

1️⃣ 框架配置(Spring 等)

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/{id}")
    public User get(@PathVariable Long id) {
        return null;
    }
}

2️⃣ 校验(如 Hibernate Validator)

@NotNull
private String name;

3️⃣ 自定义功能(日志、权限、缓存)

@Log("用户登录")
public void login() {}

五、简单完整示例

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestCase {
    String name();
}
public class Demo {

    @TestCase(name = "测试1")
    public void m1() {}

    public static void main(String[] args) throws Exception {
        for (Method m : Demo.class.getMethods()) {
            if (m.isAnnotationPresent(TestCase.class)) {
                TestCase t = m.getAnnotation(TestCase.class);
                System.out.println(t.name());
            }
        }
    }
}

六、总结一句话

Java 注解 = 给代码打标签 + 编译器/框架/反射读取并使用

如果你愿意,我也可以:

  • 用 Spring 注解 举例
  • 写一个 自定义注解 + AOP 实战
  • 对比 注解 vs 配置文件

你想看哪一种?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手