注解:
注解(Annotation)可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明。
注解(Annotation)的属性,用无参数无语句方法的形式来声明。其方法名和返回值定义了该成员的名字和类型,我们称为配置参数。方法的返回类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型或上述12种类型的数组。
自定义注解:
1、用@interface表示注解。
@interface MyAnnotation {}
2、定义属性:如果只有一个属性,参数名用“value”。
3、可以初始化属性:在属性定义后用default关键字可以给属性初始化默认值。
4、定义其元注解:一般常用的为@Retention(RetentionPolicy.RUNTIME),@Target。
@Documented,@Inherited和@Repeatable用的不多。
5、使用自定义注解:
使用时在注解前加@;
如果该注解有属性,且属性初始化过有默认值,则在使用时可以不用再对属性赋值;若没有初始化过,则在使用注解时要在后面显式初始化一下,给属性赋值。若此时只有一个属性value,可以省略“value=”。若属性为数组且只有一个元素,可以省略{}。
如果该注解没有属性,则该注解仅起到标识作用,使用时不用赋值。
▲自定义注解自动继承java.lang.annotation.Annotation接口。
▲自定义注解必须配上注解的信息处理流程才有意义。
元注解:
作用:对其他的注解进行解释说明(不要用到方法,类等地方)。
1、@Retention: 用于指定该注解的生命周期,@Rentention包含一个RetentionPolicy枚举类型的成员变量value,使用@Rentention时必须为该value指定值:
①RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),在编译过程中被丢弃。
②RetentionPolicy.CLASS:在class文件中有效(即class保留),在编译后的class文件中保留,当运行Java 程序时, JVM 不会保留注解。这是Retention注解的value默认初始化值。
③RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当行运行Java 序程序时, JVM 会保留注释。此时程序可以通过反射获取注解。
2、@Target:用于指定被修饰的注解能用于修饰哪些程序元素。@Target包含一个ElementType枚举类型数组的成员变量value,使用时也必须为该value数组指定值:
3、@Documented:用于指定所修饰的注解会被javadoc工具提取成文档时保留下来,默认情况下,javadoc是不包括注解的。它没有定义属性。
4、@Inherited:被它修饰的注解将具有继承性。注解具有继承性的意思是如果某个类使用了该注解, 则其子类将自动具有该注解。
5、@Repeatable:被它修饰的注解可以对一个程序元素重复使用。对一个注解如MyAnnotation声明@Reapeatable时,其value值为(MyAnnotations.class),并且需要额外定义一个属性为MyAnnotation[]类型的注解MyAnnotations。