Java 注解(详细学习笔记)
注解
注解英文为Annotation
-
Annotation是JDK5引入的新的技术
-
Annotation的作用:
- 不是程序本身,可以对程序做出解释
- 可以被其他程序(比如编译器)读取。
-
Annotation的格式:
注解是以
@注解名
在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")
-
Annotation在那里使用
可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。
1.常用注解
(1)@Override 表示重写
(2)@Deprecated表示不推荐使用,存在更好方法,之后可以回淘汰。
(3)@SuppressWarnings表示镇压警告。
2.元注解
元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们可以被用来提供对其他annotation类型作说明。
这些注解和他们所支持类在java.lang.annotation
包中可以找到
-
(1)@Target
用来描述注解的使用范围(即:被描述的注解可以用在说明地方)
-
(2)@Retention
表示在什么级别保存该注释信息,用来描述注解的生命周期
SOURCE
<CLASS
<RUNRIME
-
(3)@Document
说明该注解将被包含在javadoc中
-
(4)@Inherited
说明子类可以继承父类中的注解
2.1@Target
@Target的参数是一个枚举类型的数组,ElementType
。
public enum ElementType {
TYPE, //类、接口(包括注释类型)或枚举声明
FIELD, //字段声明(包括enum常量)
METHOD, //方法声明
PARAMETER, //参数
CONSTRUCTOR, //构造函数声明
LOCAL_VARIABLE, //局部变量说明
ANNOTATION_TYPE,//注释类型声明
PACKAGE, //包说明
TYPE_PARAMETER, //类型参数声明
TYPE_USE //类型使用
}
2.2 @Retention
表示在什么级别保存该注释信息,用来描述注解的生命周期,它的参数也是一个枚举类型RetentionPolicy
public enum RetentionPolicy {
//注释将被编译器丢弃。
SOURCE,
//注释将由编译器记录在类文件中,JVM不会保留(默认)
CLASS,
// 运行时(因此它们可以反射式地读取)
RUNTIME
}
3.自定义注解
-
@interface 用来声明一个注解,格式:
public @interface 注解名{ 定义内容 }
-
其中每一个方法实际上是声明了一个配置参数
-
方法的名称就是参数的名称
-
返回值类型就是参数的类型(
返回值只能是基本类型、Class、String、enum
) -
可以通过
default来声明参数的默认值
-
如果只用一个参数成员,一般参数名称为
value
-
注解元素必须有值,我们定义注解元素时,经常使用空字符串,0作为默认值。
@Target({ElementType.METHOD, ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented //生成到javadoc中
@Inherited // 子类可以继承
public @interface MyAnnotation {
String[] value() default {};
int id() default 0;
}