注解Annotation
- 1.Annotation架构
- 2.Annotation组成
- Annotation.java
- ElementType.java
- RetentionPolicy.java
- 3.注解用途
写在前面:本篇博客只用于学习笔记
Java 注解(Annotation
)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。
1.Annotation架构
从中,我们可以看出:
(01) 1 个 Annotation 和 1 个 RetentionPolicy 关联。
可以理解为:每1个Annotation对象,都会有唯一的RetentionPolicy属性。
(02) 1 个 Annotation 和 1~n 个 ElementType 关联。
可以理解为:对于每 1 个 Annotation 对象,可以有若干个 ElementType 属性。
(03) Annotation 有许多实现类,包括:Deprecated, Documented, Inherited, Override 等等。
Annotation 的每一个实现类,都 “和 1 个 RetentionPolicy 关联” 并且 " 和 1~n 个 ElementType 关联"。
2.Annotation组成
java Annotation 的组成中,有 3 个非常重要的主干类。它们分别是:
Annotation.java
package java.lang.annotation;
public interface Annotation {
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType();
}
Annotation 就是个接口。
ElementType.java
package java.lang.annotation;
public enum ElementType {
TYPE, /* 类、接口(包括注释类型)或枚举声明 */
FIELD, /* 字段声明(包括枚举常量) */
METHOD, /* 方法声明 */
PARAMETER, /* 参数声明 */
CONSTRUCTOR, /* 构造方法声明 */
LOCAL_VARIABLE, /* 局部变量声明 */
ANNOTATION_TYPE, /* 注释类型声明 */
PACKAGE /* 包声明 */
}
ElementType 是 Enum 枚举类型,它用来指定 Annotation 的类型。
“每 1 个 Annotation” 都与 “1~n 个 ElementType” 关联。当 Annotation 与某个 ElementType 关联时,就意味着:Annotation有了某种用途。例如,若一个 Annotation 对象是 METHOD 类型,则该 Annotation 只能用来修饰方法。
RetentionPolicy.java
package java.lang.annotation;
public enum RetentionPolicy {
SOURCE, /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了 */
CLASS, /* 编译器将Annotation存储于类对应的.class文件中。默认行为 */
RUNTIME /* 编译器将Annotation存储于class文件中,并且可由JVM读入 */
}
3.注解用途
- 注解的作用
- 不是程序本身 , 可以对程序作出解释.(这一点和注释(comment)没什么区别)
- 可以被其他程序(比如:编译器等)读取.
- Annotation格式
- 注解是以"@注释名"在代码中存在的
- 还可以添加一些参数值 , 例如:
@SuppressWarnings(value="unchecked")
- Annotation在哪里使用?
- 可以附加在
package , class , method , field
等上面 , 相当于给他们添加了额外的辅助信息 - 我们可以通过反射机制实现对这些元数据的访问
写在后面:
参考资料:
【狂神说Java】注解和反射Java注解