Lazy loaded image
编程
📕Day22-注解
字数 1436阅读时长 4 分钟
2019-2-2
2025-8-13
type
status
date
slug
summary
tags
category
icon
password

注解的理解

  1. jdk 5.0 新增的功能
  1. Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用 Annotation,程序员可以在不改变原逻辑的情况下, 在源文件中嵌入一些补充信息。
  1. 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。
框架 = 注解 + 反射机制 + 设计模式

RetentionPolicy

@Retention: 用来表示注解的保留阶段 value的取值是一个 RetentionPolicy类型的枚举 RetentionPolicy一共有三个取值:
  1. RetentionPolicy.SOURCE: 注解只会保留在源代码阶段,编译成为.class文件以后,注解就消失了 不会影响代码的执行,通常用于代码的校验,比如 @Override @SuppressWarning
  1. RetentionPolicy.CLASS: 注解会被保留到字节码文件阶段,但是加载 .class文件时,注解就消失了 如果一个注解不指定 RetentionPolicy,默认就是 CLASS级别
  1. RetentionPolicy.RUNTIME: 注解一直被保留到运行时,运行时通过代码可以读取到注解信息 只有 RetentionPolicy 是 RUNTIME 才能够使用反射读取到

JDK自带注解

  1. @Override: 重写注解
    1. 这个注解写与不写都不会改变程序原有的逻辑,只是用来实现语法的校验,如果一个方法没有正确的重写父类的方法,添加 @Override注解会报错,该注解只保留在源码阶段,就是实现一个编码时的语法校验
  1. Deprecated: 废弃注解
    1. 被这个注解标记的方法,类,成员变量等表示废弃的,不建议使用。如果有一个代码已经废弃了,为什么不直接删除,而是要标记为 deprecated?eg Date里是1.0出现的,1.1开始绝大部分方法都已经废弃了这个注解会保持到运行时
  1. SuppressWaring
    1. 抑制警告注解,代码里如果有警告,都不再提醒(慎用) deprecation: 抑制 过时警告 unused: 抑制变量未使用的警告 unchecked: 抑制未检查的警告
  1. @FunctionalInterface
    1. 函数式接口用于接口,被这个注解修饰的接口只能有一个抽象方法 SAM: SingleAbstractMethod 用于Lambda表达式

文档注释里的注解

@param: 用来对参数进行说明 @return: 用来对返回值进行说明 @throws / @exception: 用来对方法里的异常进行说明 @see: 参考指定的类、方法等文档 @since: 从哪个版本开始就有了 @deprecated: 从哪个版本开始废弃的

元注解

对现有的注解进行解释说明的注解
  1. @Retention: 表示的注解的保持策略(在哪儿能生效) RetentionPolicy.SOURCE RetentionPolicy.CLASS RetentionPolicy.RUNTIME
  1. @Target: 表示注解可以使用的位置(类,方法,成员变量,局部变量,包...)
  1. @Inherited: 被这个修饰的Annotation接具有继承性
  1. @Documented: 表示所修饰的注解在被javadoc解析时,保留下来

自定义注解

自定义注解的使用:使用 关键字 @interface 声明一个注解 区分使用 class声明类,使用interface声明接口,使用enum声明枚举 注意如果生命了一个注解以后,不指定@Target,这个注解可以用于所有的位置

JDK8新增注解

  1. 可重复注解
    1. 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
    2. MyAnnotation的Target和Retention等元注解与MyAnnotations相同。
  1. 类型注解
    1. ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
    2. ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。
上一篇
Day21-反射和注解
下一篇
数据治理建模规范实践总结