注解本质上是代码中的标签。有了标签可以在编译、类加载以及运行时执行指定的处理。

public @interface MyAnnotation {
    public String value() default "h"; //声明一个String类型的成员变量, 名字是value
    public String value2() default "w";
}

@MyAnnotation(value = "hello", value2 = "world")
public class Person {
    private String name;
    private int age;
}

注解能有的成员变量类型很有限,基本不支持自定义类型。主要就是8种基本类型,以及 注解 Class enum 等等

元注解

可以加在注解上的注解
元注解主要有@Retention @Documented @Target @Inherited @Repeatable

Retention

图片说明

Documented

图片说明

Target

图片说明

Inherited

图片说明

Repeatable

图片说明

//after java8
@Repeatable(value = ManTypes.class)
public @interface ManType {
    String value();
}

public @interface ManTypes {
    ManType[] value();
}
//before java8
@ManTypes({@ManType(value = "教师"), @ManType(value = "工人")}) 
//after java8
@ManType(value = "教师")
@ManType(value = "工人")
public class Man{}

常见的预制注解

图片说明
以及
图片说明