注解——概述、自定义注解以及元注解
1.概述
注解(Annotation)
- 就是Java代码里的特殊标记,比如:@Override、@Test等,作用是让其他程序根据注解信息来决定怎么执行该程序
- 注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置处
2.自定义注解
-
就是自己定义注解
public @interface 注解名称public 属性类型 属性名() default 默认值;
-
特殊属性名:value
如果注解中只有一个value属性,使用注解时,value名称可以不用写
-
注解原理
(1)注解本质是一个接口,Java中所有注解都继承了Annotation接口
(2)注解格式"@注解(…)",本质上就是该注解的一个实现类对象,实现了该注解以及Annotation
public @interface Anno1 {//基本类型public int a() default 18;//Stringpublic String name(); //没有默认值default可以省略//Classpublic Class clazz() default Anno2.class;//注解public Anno2 anno() default @Anno2;//枚举public Season season() default Season.SPRING;//以上类型的一维数组public int[] arr() default {1, 2, 3, 4, 5};public Season[] seasons() default {Season.SPRING, Season.SUMMER};
}//如果属性没有指定默认值,使用需要手动指定默认值(Anno1中的name没有默认值)
@Anno1(name = "tom")
@MyAnno("tom")
class Test {}@interface Anno2 {}@interface MyAnno {//特殊属性名:valueString value();
}enum Season {SPRING, SUMMER, AUTUMN, WINTER
}
注解中的属性类型:基本类型、String、Class、注解、枚举以上类型的一维数组
3.元注解
- 指的是:修饰注解的注解
@Target
作用:声明被修饰注解能使用的位置
@Target(ElementType.TYPE)
- TYPE,类,接口
- FIELD,成员变量
- METHOD,成员方法
- PARAMETER,方法参数
- COSTRUCTOR,构造器
- LOCAL_VARIABLE,局部变量
@Retention
作用:声明注解的保留周期
@Retention(RetentionPolicy.RUNTIME)
- SOURCE:只作用在源码阶段,字节码文件中不存在
- CLASS(默认值):保留到字节码文件阶段,运行阶段不存在
- RUNTIME(开发常用):一直保留到运行阶段
@MyAnno
public class Demo {@MyAnnoprivate String name;@MyAnnopublic void test() {}
}//1、声明被修饰注解的使用位置
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})//2、声明注解的保留周期(查看@Test上的元注解)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {}