注解


注解
  • 注解的概念:说明程序的。 (给计算机看)
  • 注释的概念:用文字描述程序。 (给程序员看)
  • 作用分类:
    1. 编写文档:通过代码里标识的注解生成文档 【生成doc文档】
    2. 代码分析:通过代码里标识的注解对代码进行分析 【使用反射】
    3. 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查 【Override】

1. JDK预定义的一些注解

  • @Overrice: 检测被该注解标注的方法是否继承自父类(接口)的
  • @Deprecated: 该注释标识的内容,标识已过时
  • @SuppressWarnings: 压制警告 (一般:@SuppressWarnings(“all”))

2. 自定义注释

1. 格式:

  • 元注解

    public @Interface 注解名称 {

    ​ 属性列表;

    }

2. 本质:

  • 注解本质上就是一个接口,该接口默认继承Annotation接口
    • public interface MyAnno extends java.lang.annotation.Annotation { }

3. 属性:

  • 接口中的抽象方法
    • 要求
      1. 属性返回值类型:
        • 基本数据类型
        • String
        • 枚举
        • 注解
        • 以上类型的数组
      2. 定义了属性,在使用时需要给属性赋值
        1. 使用 default 关键字给属性默认初始化值,则使用注解时,可不进行属性的赋值
        2. 如果属性的名称是 value ,则 value 可以省略,直接赋值即可。
        3. 数组赋值,用 { } 包裹,一个值可以省略 { }

4. 元注解

  • 用于描述注解的注解
    • @Target: 用于描述能够作用的位置
      • TYPE: 可以作用于类上
      • METHOD: 可以作用于方法上
      • FIELD:可以作用于成员变量上
    • @Retention : 描述注解被保留的的阶段(三个阶段)
      • @Retention(RetentionPolicy.RUNTIME) : (第三阶段) 当前被描述的注解,会保留到 class 字节码文件中,并被JVM 读取
    • @Documented: 加上这个注解,在生成doc文档时,会保留类中成员方法和成员变量的注解 (描述注解是否被抽取到API文档中)
    • @Inherited : 继承父类注解 (描述是否被子类继承)

3. 在程序使用(解析) 注解:

  • 获取注解中定义的属性值

1. 获取注解定义的位置的对象

  • (Class, Method, Field)

2. 获取指定的注解

  • getAnnotation(Class) 是 Java 反射中的一个方法,用于获取指定元素上的特定注解。

  • 其实就是在内存中生成了一个该注解接口的子类实现方法:

    public class ProImpl implements Pro {
    	public String getName() {
            return "han_03.Demo1";
    	}
        public String methodName() {
            return "show";
        }
    }
  1. 调用这个注解中的抽象方法,来获取配置的属性值

4. 小结:

  1. 大多数时候,我们会使用注释,不需要自定义注解
  2. 注释给谁用
    1. 编译期
    2. 解析陈冠希
  3. 注解不是程序的一部分,可以理解为注解就是一个标签

文章作者: han yue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 han yue !
评论
  目录