Java 注解( Annotation )又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、 构造器、 方法、成员变量、参数等都可以被注解进行标注。
自定义注解 --- 格式
自定义注解就是自己做一个注解来使用。
public @interface 注解名称{public 属性类型 属性名() default 默认值;//Java支持的数据类型基本上都支持}
//自定义注解
public @interface MyTest1{String a();boolean b() default true;String[] c();}//应用
@MyTest1(a = "AA", c = {"CA", "CB"})
public class AnnotationTest1{...}
注解的作用
1. 对 Java 中类、方法、成员变量做标记,然后进行特殊处理 ,至于到底做何种处理由业务需求来决定。
2.例如: JUnit 框架中,标记了注解 @Test 的方法就可以被当成测试方法执行,而没有标记的就不能当成测试方法执行。
特殊属性
1. value属性,如果只有一个value属性的情况下 , 使用value属性的时候可以省略value名称不写!!
2. 但是如果有多个属性, 且多个属性没有默认值,那么value 名称 是不能省略的。
public @interface MyTest2{String value01();}//应用
@MyTest1("value")
public class AnnotationTest2{...}
public @interface MyTest2{String value01();int age default 20;}//应用
@MyTest1("value")
public class AnnotationTest2{...}
注解的原理
元注解
元注解:注解注解的注解。
元注解有两个:
@Target: 约束自定义注解只能在哪些地方使用
@Target中可使用的值定义在ElementType枚举类中,常用值如下:
TYPE,类,接口
FIELD, 成员变量
METHOD, 成员方法
PARAMETER, 方法参数
CONSTRUCTOR, 构造器
LOCAL_VARIABLE, 局部变量
@Retention:申明注解的生命周期
@Retention中可使用的值定义在RetentionPolicy枚举类中,常用值如下:
SOURCE: 注解只作用在源码阶段,生成的字节码文件中不存在
CLASS: 注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值.
RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)
// 类,接口 成员变量
@Target({ElementType.TYPE, ElementType.METHOD})
//注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest3{...}