注解

一、什么是注解?

注解是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修饰的注解

四、在程序中解析(也就是使用)注解

使用注解中的属性值

使用步骤

  1. 获取注解定义位置的对象
  2. 获取指定的注解
  3. 调用注解中的抽象方法获取配置的属性值

具体实现步骤,不做过多演示,目前所学涉及不到,日后完善

posted @ 2020-11-09 20:22  谢海川  阅读(37)  评论(0)    收藏  举报