Java的注解

Java的注解一、注解的概念:注解并不是一开始就有的,JDK5之前是没有注解的,JDK5及其以后JDK版本才开始支持Java注解!Java注解(Annotation)也叫做元数据,以@注解名在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。1.1Java注解按照含有参数的个数分为三种:不带参数,语法结构为:@Annotation,例如@FunctionalInterface;带一个参数的注解,语

大家好,又见面了,我是你们的朋友全栈君。

一、注解的概念:

注解并不是一开始就有的,JDK5之前是没有注解的,JDK5及其以后JDK版本才开始支持Java注解!

Java注解(Annotation)也叫做元数据,以@注解名在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。

1.1 Java注解按照含有参数的个数分为三种:

  • 不带参数,语法结构为:@Annotation,例如@FunctionalInterface;
  • 带一个参数的注解,语法结构为:@Annotation(参数);
  • 带多个参数的注解,语法结构为:@Annotation(参数1,参数2,参数3…)。

1.2 内置注解

  1. @Override被用于标注方法,用于说明所标注的方法是重写父类的方法
  2. @Deprecated用于说明所标注元素(成员变量或方法)因存在安全问题或有更好选择而不鼓励使用,如果强制使用,则编译器会发出警告:
    在这里插入图片描述
  3. @SuppressWarnings用于取消编译器所显示的警告:
    在这里插入图片描述

二、自定义注解

2.1 注解的语法结构:

[public] @interface 注解名{ 
   
	[属性1;]
	[属性2;]
	...
	[属性n;]
}

2.2 属性的语法结构:

数据类型 属性名() [default 默认属性值];

2.3 示例:

public @interface Autowried { 
   
    String value() default "";
}

注意:

  1. 如果注解属性没有默认值,则使用该注解时必须指定值(否则会报错):
    在这里插入图片描述
    如果注解属性有默认值,则使用时@Autowried()@Autowried都对。

  2. 如果注解属性名为value,且只有它一个属性时,使用该注解可以直接赋值,即@Autowried("") 等价于 @Autowried(value = "")

  3. 如果注解属性的数据类型为数组类型,赋多个值时必须使用{}括起来;但若只赋一个值时,则无需使用{}

三、元注解

       元注解是Java语言中用于修饰自定义注解的注解,常用的元注解有:@Target@Retention@Documented@Inherited@Repeatable,其中@Repeatable是JDK8.0新添加的元注解。

3.1 @Target:用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元素有如下属性值:
  1. ElementType.ANNOTATION_TYPE:应用于其他注解的元注解;
  2. ElementType.CONSTRUCTOR:应用于构造函数;
  3. ElementType.FIELD:应用于全局属性
  4. ElementType.LOCAL_VARIABLE:应用于方法中的本地变量;
  5. ElementType.METHOD:应用于方法
  6. ElementType.PACKAGE:应用于包;
  7. ElementType.PARAMETER:应用于方法的参数
  8. ElementType.TYPE:应用于类、接口或者枚举声明

示例:
在这里插入图片描述
?上面的自定义注解@Autowried没有被任何元注解修饰,所以它可以在任何地方被使用,不受任何限制。

在这里插入图片描述
? 我们可以看到:当给自定义注解@Autowried添加元注解@Target(ElementType.FIELD)(仅用于修饰全局属性)时,只有在修饰全局属性时是可以用的,用在其他地方都会报错!

3.2 @Retention:用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:
  1. RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解(也就是说编译器将源码编译成class文件时直接丢弃,自定义注解不会出现在class文件中);
  2. RetentionPolicy.CLASS默认值,编译器将把注解记录在class文件中,但是当运行Java程序时,虚拟机不再保留自定义注解(也就是说源码和class文件中有自定义注解,但Java程序运行时没有);
  3. RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行Java程序时,虚拟机保留注解,程序可以通过反射获取该注解;

示例:
在这里插入图片描述
在这里插入图片描述
? 当自定义注解被@Retention(RetentionPolicy.CLASS)修饰时,自定义注解只存在于源码和class文件中,所以运行时获取不到,为null。

在这里插入图片描述
在这里插入图片描述
? 当自定义注解被@Retention(RetentionPolicy.RUNTIME)修饰时,自定义注解可以保存在Java虚拟机中,所以运行时也存在,即可以获取到:@com.jd.Autowried("")

3.3 @Documented(不常用):执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中
3.4 @Inherited(不常用):如果父类所使用的注解@Inherited修饰,则子类可以继承该注解,(否则不能继承)。
3.5 @Repeatable(不常用):所修饰的自定义注解可以重复在同一个类、方法或变量上使用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156518.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月9日 上午7:16
下一篇 2022年7月9日 上午7:16


相关推荐

  • Pytest(6)重复运行用例pytest-repeat「建议收藏」

    Pytest(6)重复运行用例pytest-repeat「建议收藏」前言平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,

    2022年7月29日
    9
  • Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理

    Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理

    2022年2月9日
    62
  • 消息总线(MQ)知多少

    消息总线(MQ)知多少1 什么时候用 MQ 1 1MQ 的基本概念 消息总线 MessageQueue MQ 是一种跨进程的通信机制 用于在上下游之间传递消息 MQ 是一种常见的上下游 逻辑解耦 物理解耦 的消息通信服务 消息发送上游只需要依赖 MQ 逻辑上和物理上都不用依赖其他服务 1 2MQ 的使用场景场景一 数据驱动的任务依赖 有些任务之间有一定的依赖关系 比如 task3 需要使用 task2 的输出作为输入 tas

    2025年9月27日
    3
  • js二维数组排序

    js二维数组排序nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp vararr nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp name zopp age 0 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp name gpp age 18 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp name yjj age 8 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp functioncomp p

    2026年3月17日
    2
  • shiro安全框架面试题_java分布式锁面试题

    shiro安全框架面试题_java分布式锁面试题shiro安全框架1.shiro可以完成哪些工作?shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等2.ApacheShiro的三大核心组件a、Subject:当前用户的操作b、SecurityManager:用于管理所有的Subjectc、Realms:用于进行权限信息的验证3.shiro有哪些组件?a、Authentication:身份认证/登录,验证用户是不是拥有相应的身份;b、Authorization:授权,即权限验证,验证某.

    2022年10月14日
    4
  • API说明

    API说明

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号