1. 标准注解
jdk1.5 版本内置了三种标准的注解:
@Override: 表示当前的方法定义将覆盖超类中的方法@Deprecated: 指不赞成使用的代码,被弃用的代码,使用了被它注解的元素时,编译器将发出警告@SuppressWarnings: 关闭不当编辑器警告信息
2. 元注解
元注解是指注解的注解 包括 @Target、@Retention、@Document、@Inherited四种。
@Target: 表示该注解可以用于什么地方,比如方法、还是成员变量、还是包等等。传入的是ElementType枚举,可选参数有:CONSTRUCTOR: 构造器声明FIELD: 字段或者属性声明LOCAL_VARIABLE: 局部变量声明METHOD: 方法声明PACKAGE: 包声明PARAMETER: 参数声明ANNOTATION_TYPE: 注解类型声明TYPE: 类、接口(包括注解类型)或 enum 声明
@Retention: 表示需要在什么级别保存该注解信息,可以简单理解为设置注解的生命周期。传入的是RetentionPolicy枚举,一般来说,自定义的注解都是RUNTIME级别,配合反射来使用。如果设置为前两个级别,则需要继承AbstractProcessor并实现process()方法,比如lombok,可选参数包括:SOURCE: 注解仅保留在源码中,并由编译器忽略CLASS: 注解在 class 文件中可用,但会被 JVM 丢弃RUNTIME: JVM 将在运行期间保留注解,因此可以通过反射机制读取注解的信息
@Document: 将注解包含在 Javadoc 中@Inherited: 表示一个注解能够被继承
3. 使用方法
jre 中通过 java.lang.reflect.AnnotatedElement 接口实现对注解的解析,其中包含一些用的到的方法:
Annotation[] getAnnotations(): 返回此元素上存在的所有注释。如果此元素没有注释,则返回长度为零的数组。该方法的调用者可以随意修改返回的数组,这不会对其他调用者返回的数组产生影响<T extends Annotation> T getAnnotation(Class<T> annotationClass): 如果存在该元素的指定类型的注释,则返回这些注释,否则返回 nullAnnotation[] getDeclaredAnnotations(): 返回直接存在于此元素上的所有注释,该方法将忽略继承的注释boolean isAnnotationPresent(Class<? extends Annotation> annotationClass): 如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。此方法主要是为了便于访问标记注释而设计的。
4. 注解介绍
1. @link
可以在 javadoc 中实现超链接样式,语法为:
1 | { ClazzName} |
2. @see
在 javadoc 中黑体字声明可以查看的类或方法,语法为:
1 | ClazzName |
3. @GuardedBy("lock")
这是一个同步锁,只有在线程持有 lock 对象锁时,才能使用这写变量
