聊一聊Java中的注解
# 注解的定义
Annotation
(注解) 是 Java5
开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。
# 注解有什么作用
# 生成带有说明的文档
如下所示代码,添加了作者、版本、since这些注解,所以在生成文档的时候就会体现这些内容。
/**
* 注解javadoc演示
*
* @author test
* @version 1.0
* @since 1.5
*/
public class AnnoDemo1 {
/**
* 计算两数的和
* @param a 整数
* @param b 整数
* @return 两数的和
*/
public int add(int a, int b ){
return a + b;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 代码分析
使用反射完成基于代码里标识的注解对代码进行分析
# 编译检查
通过代码里标识的注解让编译器能够实现基本的编译检查【Override】
# java内置的三大注解
# @Override
源码如下所示,可以看到元注解有target
和retenion
,其中retention
为source
,即在编译时检查当前子类重写的方法在父类中是否存在,如果存在则编译通过,反之。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
1
2
3
4
2
3
4
# @Deprecated
这个注解常用于提醒开发被加上注解的方法已经不推荐使用了
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
1
2
3
4
5
2
3
4
5
# @SuppressWarnings
压制程序中某些警告。
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
1
2
3
4
5
2
3
4
5
# 元注解是什么及其作用
# @Target:描述注解能够作用的位置
Target
有3个值,可以通过ElementType
获取。
ElementType取值:
1. TYPE:可以作用于类上。
2. METHOD:可以作用于方法上。
3. FIELD:可以作用于成员变量上。
1
2
3
4
2
3
4
# @Retention
描述注解被保留的阶段 @Retention(RetentionPolicy.RUNTIME)
:当前被描述的注解,会保留到class
字节码文件中,并被JVM读取到。
# @Documented
描述注解是否被抽取到接口文档中
# @Inherited
描述注解是否被子类继承
# 注解的解析方法有哪几种?
注解只有被解析之后才会生效,常见的解析方法有两种:
- 编译期直接扫描:编译器在编译 Java 代码的时候扫描对应的注解并处理,比如某个方法使用
@Override
注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。 - 运行期通过反射处理:像框架中自带的注解(比如 Spring 框架的
@Value
、@Component
)都是通过反射来进行处理的
帮助我们改善此页面! (opens new window)
上次更新: 2024/08/13, 09:07:12