注解的作用:对我们的程序进行不标注和解释
    系统注解:

    @Override 描述子类重写父类的方法
    @Deprecated 描述方法过时
    @SuppressWarnings 压制警告

    压制警告:ide方法变量没被使用为灰色,可以使用@SuppressWarnings(value = “all”)去除警告

    注解和注释的区别:
    注释:是给程序员看的;
    注解:给编译器看的(让虚拟机看到程序中的注解,注解代表程序的一些特殊功能)

    自定义注解:
    格式:public @interface 注解名{
    public 属性类型 属性名 () default 默认值;
    }
    public可以不写,默认仅能为public
    属性类型:
    基本数据类型
    String
    Class
    注解
    枚举
    以上类型的一维数组

    1. public @interface Anno1 {
    2. //定义一个基本类型的属性
    3. int a () default 23;
    4. //定义一个string类型的属性
    5. public String name();
    6. // 定义一个Class类型的属性
    7. public Class clazz() default Anno2.class;
    8. // 定义一个注解类型的属性
    9. public Anno2 anno() default @Anno2;
    10. // 定义一个枚举类型的属性
    11. public Season season() default Season.SPRING;
    12. // 以上类型的一维数组
    13. public int[] arr() default {1,2,3,4,5};
    14. // 枚举数组
    15. public Season[] seasons() default {Season.SPRING,Season.SUMMER};
    16. }
    17. // 在使用的注解的时候如果注解里面的属性没有指定默认值
    18. // 那我需要手动给出注解属性的设置值
    19. @Anno1(name = "test")
    20. public class AnnoDemo {
    21. }

    特殊属性value:如果我们定义的注解中只需要给value赋值,那么在使用的时候value这个”键”就可以省略

    1. public @interface Anno1 {
    2. //定义一个基本类型的属性
    3. int a () default 23;
    4. String value();
    5. }
    6. // 直有value需要赋值时,只需要写入需要赋的值就行
    7. @Anno1("test")
    8. public class AnnoDemo {
    9. }