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 对象锁时,才能使用这写变量