定义注解格式: public @interface 注解名 {定义体} 一、代码 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Inherited public @interface Init { String value() default ""; }
二、解析
1、@Retention– 定义该注解的生命周期
● RetentionPolicy.SOURCE : 表示该注解会保存在源代码中,不会存在编译之后的字节码文件(.class)中,@Override, @SuppressWarnings都属于这类注解。
● RetentionPolicy.CLASS : 表示该注解会保存在源代码中,也会保存在编译之后的字节码文件(.class)中,但是程序运行时,不会加载到JVM(Java虚拟机)中。注解默认使用这种方式
● RetentionPolicy.RUNTIME : 表示该注解会保存在源代码中,也会保存在编译之后的字节码文件(.class)中,当程序运行时,还会加载到JVM(Java虚拟机)中。我们自定义的注解通常使用这种方式。
2、@Target:表示该注解用于什么地方。默认值为任何元素。可用的ElementType参数包括
● ElementType.CONSTRUCTOR:表示用于描述构造器
● ElementType.FIELD:表示用于成员变量、对象、属性(包括enum实例)
● ElementType.LOCAL_VARIABLE:表示用于描述局部变量
● ElementType.METHOD:表示用于描述方法
● ElementType.PACKAGE:表示用于描述包
● ElementType.PARAMETER:表示用于描述参数
● ElementType.TYPE:表示用于描述类、接口(包括注解类型) 或enum声明
3、@Documented:表示是否将注解信息添加在java文档中。
4、@Inherited :定义该注释和子类的关系
@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
5、@interface 定义注解关键字
注解参数支持数据类型:
1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
2.String类型
3.Class类型
4.enum类型
5.Annotation类型
6.以上所有类型的数组