【注解】概述、自定义注解以及元注解

注解——概述、自定义注解以及元注解

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;
    //String
    public String name(); //没有默认值default可以省略
    //Class
    public 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 {
    //特殊属性名:value
    String 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 {
    @MyAnno
    private String name;

    @MyAnno
    public void test() {

    }
}

//1、声明被修饰注解的使用位置
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})

//2、声明注解的保留周期(查看@Test上的元注解)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {

}

你可能感兴趣的:(java)