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


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

    1.概述

    注解(Annotation)

    • 就是Java代码里的特殊标记,比如:@Override、@Test等,作用是让其他程序根据注解信息来决定怎么执行该程序
    • 注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置处
    2.自定义注解
    • 就是自己定义注解

      public @interface 注解名称
          public 属性类型 属性名() default 默认值;
      
      • 1
      • 2
    • 特殊属性名: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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    注解中的属性类型:基本类型、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 {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    面试心经
    notepad++ 如何去除换行
    docker mysql 提示 Warning: World-writable config file ‘/etc/my.cnf’ is ignored
    计算机网络中拥塞控制的门限值怎么设置
    hadoop配置文件workers
    广度优先(BFS)(例子:迷宫)
    MySQL之视图,存储
    51单片机FM调频收音机可存台音量可调TEA5767 STM32
    当苹果开发者发现自己的产品被抄袭时,该怎么做?
    微信安装包从0.5M暴涨到260M,为什么我们的程序越来越大?
  • 原文地址:https://blog.csdn.net/m0_65462447/article/details/133562990