《Java 拓展读物 注解的使用》
作者:谎言诞行    发布时间:2026年01月16日

从Java 5(也称为Java 1.5)开始,开发者在标准库中加入了一个很有用的语法:注解。那么什么是注解呢?它又怎么用呢?带着这些问题,我在网上看了很多文章。但是,大多数文章的叙述太啰嗦了。所以,这里我给大家简单说明一下。

一、什么是注解?下面我以最通俗的方式来描述。

注解,它是一个从英文单词翻译过来的词。原本的英文是 Annotation。从英文上来说,它就是一些关于事物的注释或者评论。更通俗的描述就是,它是事物的一个“标签”。比如:我们在开会时,会看到领导席的座位前面会放一个牌子,上面写着对应领导的名字。这个牌子,就是一个标签。类似于这个牌子,在Java中,我们把它称为:对程序的注解。这里,参考我下面的一个代码截图。它使用注解,标记了一个过时的类内方法。

image.png

二、如何使用注解?如果,大家能看懂第一个问题的解释,那么这里是很简单的。既然,注解是关于程序代码的一个标签。那么,它一定是标注在程序的某个地方的。

2.1、首先,我们看看如何编写一个注解。这里涉及到了注解的代码定义处理。具体看下面这张图:

image.png

这里是开发工具 eclipse 创建注解时的一个截图。它主要有几点要注意的:

  • 注解的名字,它最好不要跟其它 Java 类重名。

  • 注解的修饰词,一般都是写 public 的。因为,注解都是给大家用的。

  • 注解的作用域,具体看需要。如果在代码运行时,你要调用注解,那么设置为 Runtime。

  • 注解的标记对象,具体看需要,可多选。如果你的注解需要标记Java类和Java方法,那么设置为:Type,Method

  • 注解是否要出现在 Javadoc 中,这个一般都是要的。

2.2、一个测试用的注解,它的定义代码如下图:

image.png

从本质上来说,注解就是一个“特殊接口类”。如果你要描述一个属性,你需要定义一个对应属性名的方法。至于这个接口的实现类,它是Java标准库自己实现,不需要我们额外处理。Python中的装饰器使用方式,也是类似Java中的注解。但与Java不同,Python的装饰器本质是一个函数。

2.3、下面,我们自己试试使用这个自定义注解 @TestAnno

2.3.1、将注解标记到方法上:

image.png

2.3.2、使用反射机制,动态获取和判断注解内容:

image.png

2.3.3、执行结果如下:

image.png

三、最后我们列举下Java 8中自带的注解吧。

3.1、通用语言注解

@Override:标记方法覆盖了父类或接口中的方法

@Deprecated:标记方法、类或字段已过时,不推荐使用

@SuppressWarnings:抑制编译器警告

@SafeVarargs:声明对可变参数的安全操作(适用于泛型可变参数)

@FunctionalInterface:标记接口为函数式接口(只有一个抽象方法)

3.2、元注解(用于自定义注解)

@Target:定义注解可以应用的目标(类、方法、字段等)

@Retention:定义注解的生命周期(源码、类文件、运行时)

@Documented:标记注解包含在Javadoc中

@Inherited:允许子类继承父类的注解

@Repeatable:允许同一注解在同一位置多次使用(Java 8新增)

3.3、用于Java代码的注解

@Generated:标记代码由工具自动生成

3.4、用于Java EE的注解(部分在标准库中)

@PostConstruct:标记初始化方法

@PreDestroy:标记销毁方法

@Resource:资源注入


结束,感谢阅读。

填写一种颜色的字符(不区分大小写),1分钟有效,点击图片刷新