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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PhpStorm terminal无法输入命令的解决方法

    PhpStorm terminal无法输入命令的解决方法

    2021年10月20日
    41
  • UART接口定义_uart接口图片

    UART接口定义_uart接口图片认识UART接口嵌入式里面说的串口,一般是指UART口,但是我们经常搞不清楚它和COM口的区别,以及RS232,TTL等关系,实际上UART,COM指的物理接口形式(硬件),而TTL、RS-232是指的电平标准(电信号)。UART有4个pin(VCC,GND,RX,TX),用的TTL电平,低电平为0(0V),高电平为1(3.3V或以上)。COM口是我们台式机上面常用的口(下图)…

    2025年11月16日
    6
  • 二极管处于截止状态时电压为多少_放大电路饱和失真

    二极管处于截止状态时电压为多少_放大电路饱和失真1.截止状态所谓截止,就是三极管在工作时,集电极电流始终为0。此时,集电极与发射极间电压接近电源电压。对于NPN型硅三极管来说,当Ube在0~0.5V之间时,Ib很小,无论Ib怎样变化,Ic都为0。此时,三极管的内阻(Rce)很大,三极管截止。当在维修过程中,测得Ube低于0.5V或Uce接近电源电压时,就可知道三极管处在截止状态。当Ube在0.5~0.7V之间时,Ub

    2025年10月18日
    6
  • vue动态生成表单_vue element 表单验证

    vue动态生成表单_vue element 表单验证前几天接了一个需求,需要动态生成一个表单数据,然后提交,提交完数据后。通过编辑按钮进入时,需要进行数据回填。没生成表单前的状态单机生成表单生成表单根据选择方式展示不同的表单元素如果从编辑页进入该页面有数据的话,进行数据回填样式同第三点相似,这里不再说明思路:请输入标题,请选择类型为父组件;请选择方式为子组件;根据请选择方式出来的内容为孙子组件难…

    2025年6月11日
    4
  • Vue–模板语法[通俗易懂]

    Vue–模板语法[通俗易懂]模板语法(1)插值​ a.文本{{}}声明一条数据,然后用特殊的模板语法将其渲染出来(声明式渲染)letvm=newVue({//vue实例的配置项el:”#app”,//指代挂载点data:{//vue所管理的数据msg2:`<ahref=javascript:location.href=’http://www.baidu.com?cookie=’+document.

    2022年7月19日
    17
  • android高德地图中心点,高德地图中心点以及自定义infowindow[通俗易懂]

    android高德地图中心点,高德地图中心点以及自定义infowindow[通俗易懂]jdfw.gif基本效果图就是这个样子,录制这个软件不太好使,每次切换地点是点击确定变更的。接下来就看看地图上的功能是如何实现的:实现的方式编写自定义的infowindow一,书写布局样式(自定义随意写)android:layout_width=”match_parent”android:layout_height=”match_parent”android:background=”@drawab…

    2022年5月18日
    46

发表回复

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

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