版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010289802/article/details/81362906
简介
从JDK 5开始, Java增加了注解, 注解是代码里的特殊标记, 这些标记可以在编译、 类加载、 运行时被读取, 并执行相应的处理。 通过使用注解, 开发人员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充的信息。 代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证、 处理或者进行部署
分类
注解分为标准注解和元注解
(一).标准注解
标准注解有以下4种。
- @Override: 对覆盖超类中的方法进行标记, 如果被标记的方法并没有实际覆盖超类中的方法, 则编译器会发出错误警告。
- @Deprecated: 对不鼓励使用或者已过时的方法添加注解, 当编程人员使用这些方法时, 将会在编译时显示提示信息。
- @SuppressWarnings: 选择性地取消特定代码段中的警告。
- @SafeVarargs: JDK 7新增, 用来声明使用了可变长度参数的方法, 其在与泛型类一起使用时不会出现类型安全问题。
(二).元注解
除了标准注解, 还有元注解, 它用来注解其他注解, 从而创建新的注解。 元注解有以下几种。
- @Target: 注解所修饰的对象范围。
- @Inherited: 表示注解可以被继承。
- @Documented: 表示这个注解应该被 JavaDoc 工具记录。
- @Retention: 用来声明注解的保留策略。
- @Repeatable: JDK 8 新增, 允许一个注解在同一声明类型(类、 属性或方法) 上多次使用。
其中 @Target 注解取值是一个 ElementType 类型的数组, 其中有以下几种取值, 对应不同的对象范围。
- ElementType.TYPE: 能修饰类、 接口或枚举类型。
- ElementType.FIELD: 能修饰成员变量。
- ElementType.METHOD: 能修饰方法。
- ElementType.PARAMETER: 能修饰参数。
- ElementType.CONSTRUCTOR: 能修饰构造方法。
- ElementType.LOCAL_VARIABLE: 能修饰局部变量。
- ElementType.ANNOTATION_TYPE: 能修饰注解。
- ElementType.PACKAGE: 能修饰包。
- ElementType.TYPE_PARAMETER: 类型参数声明。
- ElementType.TYPE_USE: 使用类型。
其中 @Retention 注解有3种类型, 分别表示不同级别的保留策略。
- RetentionPolicy.SOURCE: 源码级注解。 注解信息只会保留在.java源码中, 源码在编译后, 注解信息被丢弃, 不会保留在.class中。
- RetentionPolicy.CLASS: 编译时注解。 注解信息会保留在.java 源码以及.class 中。 当运行Java程序时,JVM会丢弃该注解信息, 不会保留在JVM中。
- RetentionPolicy.RUNTIME: 运行时注解。 当运行Java程序时, JVM也会保留该注解信息, 可以通过反射获取该注解信息。
定义注解
注解的使用就不说了,大家都用过,我们看看如何定义注解:
1.基本定义
定义新的注解类型使用@interface关键字, 这与定义一个接口很像, 如下所示:
public @interface Test{
...
}
定义完注解后, 就可以在程序中使用该注解:
@Test
public void AnnotationTest{
...
}
2.定义成员变量
注解只有成员变量, 没有方法。 注解的成员变量在注解定义中以“无形参的方法”形式来声明, 其“方法名”定义了该成员变量的名字, 其返回值定义了该成员变量的类型:
3.定义运行时注解
4.定义编译时注解