Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。

注解不光可以用在方法上,还可以用在类上、变量上、构造器上等位置。

自定义注解格式:

1
2
3
public @interface 注解名称 {
public 属性类型 属性名() default 默认值;
}

注解的本质

1
2
3
4
5
public @interface MyTest{
String aaa();
boolean bbb() default true; //default true 表示默认值为true,使用时可以不赋值。
String[] ccc();
}

使用XJad工具进行反编译

1
2
3
4
5
public interface MyTest1 extends Annotation {
public abstract String aaa();
public abstract boolean bbb();
public abstract String[] ccc();
}

注解本质上是接口,每一个注解接口都继承子Annotation接口,注解中的属性本质上是抽象方法。元注解

@Target(ElementType.TYPE)声明注解使用位置

  1. TYPE,类,接口
  2. FIELD,成员变量
  3. METHOD,成员方法
  4. PARAMETER,方法参数
  5. CONSTRUCTOR,构造器
  6. LOCAL_VARIABLE,局部变量

@Retention(RetentionPolicy.RUNTIME)声明注解保留时期

  1. SOURCE
    • 只作用在源码阶段,字节码文件中不存在
  2. CLASS(默认值)
    • 保留到字节码文件阶段,运行阶段不存在
  3. RUNTIME(开发常用)
    • 一直保留到运行阶段