注解相关的类位于java.lang.annotation包下:
1.元注解:
- 作用:对其他annotation类型作说明;
- 分类:
1. @Target
2. @Retention
3. @Documented
4. @Inherited
@Target:
说明Annotation所修饰的对象范围,官方文档也作了说明:
Annotation所修饰的内容由枚举ElementType决定:
type | anno |
---|---|
TYPE | Class, interface (including annotation type), or enum declaration(类, 接口, 注解, 枚举) |
FIELD | Field declaration (includes enum constants) (变量,枚举常量) |
METHOD | 方法 |
PARAMETER | 方法参数 |
CONSTRUCTOR | 构造方法 |
LOCAL_VARIABLE | 本地变量 |
ANNOTATION_TYPE | Annotation |
PACKAGE | 修饰包名 |
TYPE_PARAMETER | 方法参数类型 |
TYPE_USE | anno |
@Retention:
enum RetentionPolicy
enum | anno |
---|---|
SOURCE | 注解将会被编译器丢地 |
CLASS | 注解被编译器记录在class文件中,但是在VM的运行时期无效 |
RUNTIME | 注解被记录在class文件中,并且在运行时期有效,所以他们可能通过反射用到 |
@Documented:
@Inherited:
2.自定义注解:
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节, 在定义注解时, 不能继承其他的注解接口. @interface用来声明一个注解, 其中每一个方法实际上是声明了一个配置参数, 方法的名称就是参数的名称, 返回值类型就是参数的类型.
1.定义注解的格式:
public @interface 注解名
2.注解参数可支持数据类型:
1. 所有的基本数据类型;
2. String类型;
3. Class类型;
4. enum类型;
5. Annotation类型;
6. 以上所有类型的数组;
3.Annotation类型里面的参数设置:
- 只能用public或default这两个访问权修饰
- String value()的参数成员为String;
- 如果只有一个参数成员, 最好把参数名称设为”value”,后加小括号;