使用注解描述程序代码

1.认识注解

Java 注解就是 Annotation ,是 Java 代码里的特殊标记

  • 为 Java 程序提供了一种形式化的方法
  • 用来表达额外的某些信息
    • 这些信息是代码本身无法表示的
  • 可以方便得而使用注解修饰程序元素
    • 包括类、方法、成员变量等
  • 以标签的形式存在于 Java 代码中
    • 不影响程序代码的编译和执行
  • 语法
    • 只需在程序元素前面加上 @ 符号即可
@Override
@SuppressWarnings(value="unused")
@MyTag(name="Amber",age=28)
  • 注解的使用规范
    • 将注解置于所有修饰符之前
    • 通常将注解单独放置在一行
    • 默认注解可用于修饰任何程序元素
      • 包括类、方法、成员变量……

2.注解分类

在 Java 中,根据注解的使用方法和用途,可分为3类,分别为内建注解、元注解和自定义注解

(1)内建注解

  • @Override 注解
    • 被用来标注方法,用来表示该方法时重写父类的某方法
  • @Deprecated 注解
    • 标识程序元素已过时
    • 编译器将不再鼓励使用这个被标注的程序元素
    • 如果使用编译器会在该程序元素上画一条斜线,表示该程序元素已过时
  • @SuppressWarnings 注解
    • 标识阻止编译器警告
    • 被用于有选择地关闭编译器对类、方法和成员变量等程序元素及其子元素地警告
    • 会一直作用于该程序元素地所有子元素
    • 常用参数:
      • deprecation : 使用了过时的程序元素
      • unchecked : 执行了未检查的转换
      • unused : 有程序元素未被使用
      • fallthrough : switch 程序块直接通往下一种情况而没有 break
      • path : 在类路径、源文件路径等中有不存在的路径
      • serial : 在可序列化的类上缺少 serialVersionUID 定义
      • finally : 任何 finally 子句不能正常完成
      • all : 所有情况
  • 当注解类型只有一个 value 成员变量,使用该注解时可以直接在注解后的括号中指定 value 成员变量的值
    • 无需使用 name = value 机构对的形式

(2)元注解

  • @Target注解
    • 用于指定被其修饰的注解能用于修饰哪些程序元素
    • 有唯一的 value 作为成员变量,是 java.lang.annotation.ElementType 类型
      • ElementType.ANNOTATION_TYPE : 注释声明
      • ElementType.CONSTRUCTOR :构造方法声明
      • ElementType.FIELD :成员变量声明
      • ElementType.LOCAL_VARIABLE : 局部变量声明
      • ElementType.METHOD : 方法声明
      • ElementType.PACKAGE :包声明
      • ElementType.PARAMETER :参数声明
      • ElementType.TYPE :类、接口或枚举声明
  • @Retention注解
    • 描述了被其修饰的注解是否被编译器丢弃或者保留在 class 文件中
      • 默认情况下,注解被保存在 class 文件中,但在运行时并不能被反射访问
    • 包含一个 RetentionPolicy 类型的 value 成员变量,其取值来自于 java.lang.annotationg.RetentionPolicy 的枚举类型
      • RetentionPolicy.CLASS :默认值,表示编译器会把被修饰的注解记录在 class 文件中,但在运行程序时,虚拟机不再保留注解,从而无法通过反射对注解进行访问
      • RetentionPolicy.RUNTIME :表示编译器将注解记录在 class 文件中,当运行程序时,虚拟机会保留注解,可以通过反射获得该注解
      • RetentionPolicy.SOURCE :表示编译器会直接丢弃被修饰的注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention{
	RetentionPolicy value();
}
  • @Documented注解
    • 用于指定被其修饰的注解将被 JavaDoc 工具提取成文档
    • 没有成员变量
  • @ Inherited注解
    • 用于指定被其修饰的注解将具有继承性

(3)自定义注解

  • 注解类型是一种接口,但它又不同于接口
    • 定义一个性地注解类型与定义一个接口非常相似,要使用 @interface 关键字
      • public @interface AnnotationTest{}
  • 注解类型定义之后就可以用它来修饰程序中的类、接口、方法和成员变量等程序元素
  • 自定义注解在实际的开发中使用频率并不是很多

3.读取注解信息

  • java.lang.reflect 包下的 AnnotationElement 接口代表程序中可以接收注解的程序元素
    • Class : 类定义
    • Constructor : 构造方法定义
    • Field : 类的成员变量定义
    • Method : 类的方法定义
    • Package : 类的包定义
  • java.lang.reflect.AnnotationElement 接口是所有程序元素的父接口
    • 程序通过反射获得某个类的 AnnotationElement 对象,调用该对象的3个方法就可以来访问注解信息
      • getAnnotation() :用于返回该程序元素上存在的、指定类型的注解
      • getAnnotations() :用于返回该程序元素上所有的注解
      • getAnnotationPresent() :用于判断该程序元素上是否包含指定类型的注解
  • 需要获取某个注解里的元数据,可以将注解强制类型转换成所需的注解类型,通过注解对象的抽象方法来访问元数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值