当前位置: 首页 > article >正文

Java 注解(详细学习笔记)

注解

注解英文为Annotation

  • Annotation是JDK5引入的新的技术

  • Annotation的作用:

    • 不是程序本身,可以对程序做出解释
    • 可以被其他程序(比如编译器)读取。
  • Annotation的格式:

    注解是以@注解名在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")

  • Annotation在那里使用

    可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

1.常用注解

(1)@Override 表示重写

(2)@Deprecated表示不推荐使用,存在更好方法,之后可以回淘汰。

(3)@SuppressWarnings表示镇压警告。

2.元注解

元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们可以被用来提供对其他annotation类型作说明。

这些注解和他们所支持类在java.lang.annotation包中可以找到

  • (1)@Target

    用来描述注解的使用范围(即:被描述的注解可以用在说明地方)

  • (2)@Retention

    表示在什么级别保存该注释信息,用来描述注解的生命周期

    SOURCE<CLASS<RUNRIME

  • (3)@Document

    说明该注解将被包含在javadoc中

  • (4)@Inherited

    说明子类可以继承父类中的注解

2.1@Target

@Target的参数是一个枚举类型的数组,ElementType

public enum ElementType {
    TYPE,			//类、接口(包括注释类型)或枚举声明
    FIELD,			//字段声明(包括enum常量)
    METHOD,			//方法声明
    PARAMETER,		//参数
    CONSTRUCTOR,	//构造函数声明
    LOCAL_VARIABLE,	//局部变量说明
    ANNOTATION_TYPE,//注释类型声明
    PACKAGE,		//包说明
    TYPE_PARAMETER,	//类型参数声明
    TYPE_USE		//类型使用
}

2.2 @Retention

表示在什么级别保存该注释信息,用来描述注解的生命周期,它的参数也是一个枚举类型RetentionPolicy

public enum RetentionPolicy {
    //注释将被编译器丢弃。
    SOURCE,
    //注释将由编译器记录在类文件中,JVM不会保留(默认)
    CLASS,
    // 运行时(因此它们可以反射式地读取)
    RUNTIME
}

3.自定义注解

  • @interface 用来声明一个注解,格式:public @interface 注解名{ 定义内容 }

  • 其中每一个方法实际上是声明了一个配置参数

  • 方法的名称就是参数的名称

  • 返回值类型就是参数的类型(返回值只能是基本类型、Class、String、enum

  • 可以通过default来声明参数的默认值

  • 如果只用一个参数成员,一般参数名称为value

  • 注解元素必须有值,我们定义注解元素时,经常使用空字符串,0作为默认值。

@Target({ElementType.METHOD, ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented //生成到javadoc中
@Inherited  // 子类可以继承
public @interface MyAnnotation {
    String[] value() default {};
    int id() default 0;
}

http://www.kler.cn/a/1964.html

相关文章:

  • (Z Shell)zsh: no matches found: ? 使用单引号包裹
  • Activiti开启流程实例
  • druid与pgsql结合踩坑记
  • 使用PyInstaller打包时出现的问题
  • 最新ubuntu20.04安装docker流畅教程
  • YOLOv8目标检测(七)_AB压力测试
  • RK3588平台开发系列讲解(视频篇)RTP H264 码流打包详解
  • 硬件速攻-AT24CXX存储器
  • 常见背包问题
  • 三月份跳槽了,历经字节测开岗4轮面试,不出意外,被刷了...
  • centos7安装mysql5.7.4(rpm安装版)与 MySQL5.7.4glibc版Linux安装
  • linux console快捷键
  • 如何设计一个锂电池充电电路(TP4056)
  • 最好用的Markdown编辑器:MWeb Pro mac
  • CSS实现文字凹凸效果
  • 第十四届蓝桥杯第三期模拟赛 【python】
  • FreeRTOS-编程风格
  • 你真的会写软件测试计划吗?所有测试工作者都在找的软件测试计划模板在这
  • 如何将pdf文件压缩?pdf压缩软件哪个好
  • 百度CTO王海峰:全栈AI技术加持,打造新一代大语言模型文心一言
  • 基础运算符
  • 【数据分析之道①】字符串
  • 面试官:说一下MySQL中的锁机制吧
  • jpg格式图片打不开怎么办
  • i9-13900K服务器租用驰网高主频高防服务器
  • 端口镜像讲解