注解
-
概念:也叫元数据,一种代码级别的说明,是1.5后的新特性,用来对类、接口等进行说明
-
作用:编写文档(如api文档)、代码分析(使用反射)、编译检查
-
JDK预定义的注解
-
@Override:检测被该注解的方法是否是继承自父类或父接口的
-
@Deprecated:将该注解标注的内容,表示为已过时
-
@SuppressWarnings:压制警告 需要传参,一般传“all”
-
-
自定义注解
格式:
元注解
public @interface 注解名称{
属性列表();
}
- 本质:本质上就是一个接口,默认继承了java.lang.annotation.Annotation
public interface MyAnno extends java.lang.annotation.Annotation{}
- 属性:接口中可以定义的成员方法(抽象方法)
要求:
-
属性的返回值类型 ( 只能返回:基本数据类型、String,枚举、注解以及以上类型的数组)
-
定义了属性,在使用时需要给属性赋值
-
如果定义属性时,使用default关键字给属性默认值初始化值时,则使用注解时,可以不进行属性赋值
注:如果只有一个属性需要赋值,并且属性的名叫value,则属性名可以不写
例:
定义注解为:
[外链图片转存失败(img-AuPRq4x5-1562495184460)(C:\Users\20215\AppData\Roaming\Typora\typora-user-images\1562079917566.png)]
使用时为:
[外链图片转存失败(img-9LDzOwbl-1562495184476)(C:\Users\20215\AppData\Roaming\Typora\typora-user-images\1562079870325.png)]
各种类型的赋值方式
[外链图片转存失败(img-2jPXp3br-1562495184478)(C:\Users\20215\AppData\Roaming\Typora\typora-user-images\1562080204382.png)]
其中第一个为int 第二个为枚举,第三个为注解,第四个为数组(如果数组中只有一个值,大括号可以省略)
- 元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置 ,可以存在多个ElementType,用逗号隔开
- ElementType.TYPE 表示只能作用在类上
- ElementType.METHOD 可以作用于方法上
- ElementType.FIELD:可以作用于成员变量上
- @Retention:描述注解被保留的阶段
- @Retention(RetentionPolicy。RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到(一般会用这个)
- @Documented: 描述注解是否被抽取到api文档住
- @Inherited:描述注解是否被子类继承
- 在程序中使用(解析)注解
主要是获取注解中的属性值
1.获取注解定义位置的对象(class、Method等对象)
2.获取指定的注解 getAnnotation(Class)
3.调用注解中的抽象方法获取配置的属性值
小结:
以后大部分都是使用注解,而不是解析注解
注解给编译器和解析程序使用
注解不是程序的一部分,可以理解为一个标签