注解
一、什么是注解?
注解是JDK1.5之后的新特性,用于说明程序,使用的方式就是@注解名称
二、注解的作用是什么?
1、编写文档:
通过代码里标识的注解生成文档(生成doc文档)
2、代码分析:
通过代码里面表示的注解对代码进行分析(使用反射)
3、编译检查
通过代码里面标识的注解,让编译器能够实现基本的编译检查(例如@Override,用于检查是不是方法是不是覆盖重写)
JDK中预定义的一些注解
1、@Override
检测被该注解标注的方法是否是继承自父类(接口)的
2、@Deprecated
该注解标注的内容,表示已过时
3、@SuppressWarnings
压制警告
一般传递参数all,@SuppressWarnings(“all”)
三、自定义注解
1、定义格式
元注解
public @interface 注解名称{
属性列表
}
2、注解的本质是什么?
注解的本质就是一个接口,该接口默认继承Annotation接口
可以通过反cmd中使用javap反编译你的自定义注解,最终的到的反编译代码是
public interface 自定义注解名称 extends java.lang.annotation.Annotation{
}
3、属性:接口中可以定义的成员方法(也就是抽象方法)
要求:
(1) 属性的返回值类型只能有以下几种
① 基本数据类型
② String
③ 枚举
④ 注解
⑤ 以上类型的数组
(2) 定义了属性,在使用时需要给属性赋值
① 如果定义属性时,使用了default关键字给属性默认初始化值,则使用注解的时候,可以不进行属性的赋值
② 如果只用一个属性需要赋值,并且属性是 value,则 value 可以忽略,直接定义值就行
③ 数组赋值的时候,使用 {} 包裹,如果数组中元素只用一个,则 {} 可以省略。
4、什么是元注解?
描述注解的注解
几个常见的元注解
(1)@Target:描述注解能够作用的位置
该注解接收的属性的是一个 ElementType (enum)枚举值数组,其中一共有七个枚举值
ElementType.ANNOTATION_TYPE 可以给一个类进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
(2)@Retention:描述注解被保留的阶段
该注解同样也是接收一个 RetentionPolicy 的枚举值。其中有下面几个枚举值:
RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
(3)@Documented:描述注解是否被抽取到api文档中
(4)@Inherited:如果继承了使用了该注解的类,那么它会自动继承父类中的被Inherited修饰的注解
四、在程序中解析(也就是使用)注解
使用注解中的属性值
使用步骤
- 获取注解定义位置的对象
- 获取指定的注解
- 调用注解中的抽象方法获取配置的属性值

浙公网安备 33010602011771号