写点什么

Java 注解

作者:储诚益
  • 2025-01-27
    安徽
  • 本文字数:1655 字

    阅读完需:约 5 分钟

Java注解

1. 什么是 Java 注解?

可以把 Java 注解想象成生活中的便利贴或标签。比如你有一个笔记本,里面记录了很多内容,为了方便快速找到某些重要的页面或者记住一些特殊的信息,你可以在相应的页面边缘贴上不同颜色的便利贴,每个便利贴上可以写上简单的提示,如 “重要公式”“待办事项”“疑问点” 等。在 Java 中,注解就是这样一种 “便利贴”,它可以贴在类、方法、变量等代码元素上,用来标记和说明这些元素的特性、用途或其他相关信息。

这些便利贴本身不会改变笔记本里的内容,但是它们可以帮助你更方便地组织和查找信息。同样,Java 注解也不会改变程序的语义和行为逻辑,但它可以为编译过程或运行环境提供额外的信息,从而触发特定的操作或实现特定的功能。例如,编译器可以利用注解进行语法检查、生成文档;运行时环境可以通过注解来初始化对象、管理依赖关系等。

2. Java 有哪些内置注解?

  • @Override:在 Java 中,@Override 注解就表示当前的方法是对父类(或接口)方法的重写,编译器会检查是否正确重写了父类的方法,如果没有正确重写,就会报错,就像家族成员发现儿子并没有按照父亲的原意去处理业务一样。

  • @Deprecated:假设你有一家商店,店里有一些商品因为款式过时、质量不好或者其他原因,不再推荐顾客购买,但暂时还没有完全下架。你就可以在这些商品上贴上 “不推荐购买” 的标签,同时在标签旁边写上推荐的其他替代商品。在 Java 中,@Deprecated 注解就类似于这个 “不推荐购买” 的标签,它表示被标注的元素(类、方法、字段等)已经过时,不建议使用,并且通常会提示开发人员使用其他更好的替代方案。

  • @SuppressWarnings:当你在家里打扫卫生时,可能会遇到一些地方比较脏或者难以清洁,在清洁过程中会产生一些灰尘或者异味,这就像是编译器在编译代码时给出的一些警告信息。有时候你可能知道这些情况是暂时无法避免的,或者你已经采取了一些措施来应对这些问题,所以不想再看到这些提醒。你就可以在显眼的地方贴上一个 “忽略清洁警告” 的纸条。在 Java 中,@SuppressWarnings 注解就是用来告诉编译器忽略某些特定的警告信息的。

3. 如何理解元注解?

  • 元注解名称: @Retention

  • 功能描述: 用于指定注解的保留策略,即注解在什么阶段有效[^1^][^2^]。

  • 取值及含义:

  • RetentionPolicy.SOURCE:仅在源代码中保留,编译时会被丢弃。

  • RetentionPolicy.CLASS:编译后保留在 class 文件中,但在运行时会被虚拟机丢弃。

  • RetentionPolicy.RUNTIME:在运行时依然可见,可通过反射机制读取[^3^]。

  • 使用场景举例: 例如,一个用于测试目的的注解,只在开发阶段使用,那么可以使用 @Retention(RetentionPolicy.SOURCE);而像 Spring 框架中的一些注解,需要在运行时通过反射获取信息并执行相应逻辑,则使用 @Retention(RetentionPolicy.RUNTIME)[^4^]。

  • 元注解名称: @Target

  • 功能描述: 用于指定注解可以应用于哪些程序元素[^1^][^2^]。

  • 取值及含义:

  • ElementType.TYPE:类、接口、枚举。

  • ElementType.FIELD:字段、枚举常量。

  • ElementType.METHOD:方法。

  • ElementType.PARAMETER:方法参数。

  • ElementType.CONSTRUCTOR:构造函数。

  • ElementType.LOCAL_VARIABLE:局部变量。

  • ElementType.ANNOTATION_TYPE:注解类型。

  • ElementType.PACKAGE:包[^3^]。

  • 使用场景举例: 例如,定义一个只能用在方法上的注解 @MyMethodAnnotation,使用 @Target(ElementType.METHOD) 来指定其目标范围[^4^]。

  • 元注解名称: @Documented

  • 功能描述: 表示使用该注解的自定义注解将被 javadoc 工具提取成文档[^1^][^2^]。

  • 取值及含义: 无特定值。

  • 使用场景举例: 如果有一个自定义注解 @ApiDescription,用于给 API 接口添加描述信息,并且希望这些描述在生成的文档中可见,就可以使用 @Documented 元注解来标记它。

  • 元注解名称: @Inherited

  • 功能描述: 标记这个注解是继承于哪个注解类(默认注解并没有继承于任何子类)[^1^][^2^]。

  • 取值及含义: 无特定值。

  • 使用场景举例: 假设有一个基础类 BaseClass,使用了 @Inherited @MyAnnotation 注解,那么在继承自 BaseClassSubClass 中,也会隐式地拥有 @MyAnnotation 注解。


用户头像

储诚益

关注

还未添加个人签名 2017-12-19 加入

还未添加个人简介

评论

发布
暂无评论
Java注解_java 技术提升_储诚益_InfoQ写作社区