语法是 @interface
修饰
// 表示该注解仅作用在类上
@Target(ElementType.TYPE)
// 运行时可以获取到该注解, 如果不标注则运行时无法获取到该注解
@Retention(RetentionPolicy.RUNTIME)
public @interface Vip {
// 声明 value 方法, 当我们只有一个属性时, 可以省略 value = , 直接输入 value 属性值
// 注解中方法必须是无参数的
// 注解中方法返回值只支持 8 中基本数据类型, class 类, enum 枚举, string 字符串, @interface 注解, 以及这些类型对应的数组类型, 其他的都不支持, 即不支持基本类型包装类或其他类
// 返回值是数组类型时, 我们在使用注解赋值属性时, 允许直接赋值一个元素, 而不用 {} 包裹, 如果是多个元素, 那么还是需要使用 {} 包裹
// 注解的属性值默认都是必填的, 如果想要非必填, 在方法() 后面声明 default 默认值
String[] value() default "";
int age() default 20;
}