欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > JavaSE核心知识点03高级特性03-05(注解)

JavaSE核心知识点03高级特性03-05(注解)

2025/5/26 8:06:02 来源:https://blog.csdn.net/mo_sss/article/details/148144989  浏览:    关键词:JavaSE核心知识点03高级特性03-05(注解)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点03高级特性03-05(注解)
      • 一、注解是什么?
        • 类比理解:
      • 二、Java 内置的常用注解
        • 1. `@Override`
        • 2. `@Deprecated`
        • 3. `@SuppressWarnings`
      • 三、如何自定义注解?
        • 1. 定义注解
        • 2. 元注解(Meta-Annotation)
      • 四、注解的处理方式
        • 1. 反射处理(运行时)
        • 2. 编译时处理(如 Lombok)
      • 五、实际应用场景
      • 六、注意事项
      • 七、总结


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

在这里插入图片描述

JavaSE核心知识点03高级特性03-05(注解)

好的!我来为你详细讲解 Java 中的注解(Annotation),内容会循序渐进,尽量通俗易懂。以下是完整的学习路径:


一、注解是什么?

注解(Annotation)是 Java 中的一种元数据(描述数据的数据),它本身不直接影响代码逻辑,但可以为代码提供额外的信息。类似于“标签”,用来标记代码的特殊行为或配置。

类比理解:
  • 想象你在一本书上贴便利贴,便利贴本身不改变书的内容,但能提醒你注意某些部分(如“重点”、“待办”)。注解的作用类似。

二、Java 内置的常用注解

Java 提供了一些内置注解,以下是几个常见的:

1. @Override
  • 作用:标记方法是为了覆盖父类或接口中的方法。
  • 示例
    @Override
    public String toString() {return "This is a custom toString()";
    }
    
  • 用途:帮助编译器检查是否正确覆盖了父类方法(避免拼写错误)。
2. @Deprecated
  • 作用:标记方法、类或字段已过时,不推荐使用。
  • 示例
    @Deprecated
    public void oldMethod() {// 过时的方法
    }
    
  • 效果:调用该方法时,编译器会生成警告。
3. @SuppressWarnings
  • 作用:抑制编译器警告。
  • 示例
    @SuppressWarnings("unchecked")
    public void someMethod() {List list = new ArrayList(); // 这里会有“未检查类型”的警告,但被注解抑制
    }
    

三、如何自定义注解?

你可以创建自己的注解,以下是步骤:

1. 定义注解

使用 @interface 关键字:

// 定义一个名为 MyAnnotation 的注解
public @interface MyAnnotation {String value() default ""; // 注解的参数int priority() default 0;
}
2. 元注解(Meta-Annotation)

元注解是用于修饰注解的注解,用来定义注解的行为:

元注解作用
@Target指定注解可以应用的位置(如类、方法、字段等)。
@Retention指定注解的保留策略(源码级、编译期、运行时)。
@Documented注解会被包含在 Javadoc 中。
@Inherited子类可以继承父类的注解。

示例:定义一个用于方法的运行时注解

import java.lang.annotation.*;@Target(ElementType.METHOD) // 只能用在方法上
@Retention(RetentionPolicy.RUNTIME) // 运行时保留
public @interface MyMethodAnnotation {String description() default "默认描述";boolean enabled() default true;
}

四、注解的处理方式

注解本身没有行为,需要通过反射或编译时处理来触发逻辑。

1. 反射处理(运行时)

通过反射读取注解信息:

public class Test {@MyMethodAnnotation(description = "这是一个测试方法")public void testMethod() {// 方法内容}public static void main(String[] args) throws NoSuchMethodException {Method method = Test.class.getMethod("testMethod");if (method.isAnnotationPresent(MyMethodAnnotation.class)) {MyMethodAnnotation annotation = method.getAnnotation(MyMethodAnnotation.class);System.out.println("描述:" + annotation.description()); // 输出:这是一个测试方法System.out.println("是否启用:" + annotation.enabled()); // 输出:true}}
}
2. 编译时处理(如 Lombok)

通过注解处理器(Annotation Processing Tool, APT)在编译时生成代码。例如 Lombok 的 @Data 注解会自动生成 getter/setter。


五、实际应用场景

  1. 框架配置(如 Spring):

    @Service
    public class UserService {@Autowiredprivate UserRepository userRepository;
    }
    
  2. 单元测试(如 JUnit):

    @Test
    public void testAddition() {assertEquals(4, 2 + 2);
    }
    
  3. 序列化/反序列化(如 Jackson):

    public class User {@JsonProperty("user_name")private String userName;
    }
    

六、注意事项

  1. 保留策略:如果需要在运行时获取注解,必须设置 @Retention(RetentionPolicy.RUNTIME)
  2. 目标范围:用 @Target 明确注解的应用位置(如 ElementType.TYPE 表示类)。
  3. 默认值:注解参数需定义默认值(如 default ""),否则使用时必须显式赋值。
  4. 参数类型限制:注解的参数只能是基本类型、String、Class、枚举或数组。

七、总结

  • 注解的作用:提供元数据,辅助代码分析或配置。
  • 核心步骤:定义注解 → 用元注解修饰 → 处理注解逻辑(反射/APT)。
  • 学习建议:从简单注解开始,尝试结合反射实现功能(如自定义日志注解)。

动手练习:

  1. 定义一个注解 @LogExecutionTime,用于记录方法的执行时间。
  2. 通过反射在方法执行前后计算时间差。

如果有疑问,可以随时提出!



📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词