当前位置: 首页 > 编程日记 > 正文

Java的注解

一、注解的概念:

注解并不是一开始就有的,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(不常用):所修饰的自定义注解可以重复在同一个类、方法或变量上使用。

相关文章:

activemq的学习,第一篇

本地的activemq的地址: http://localhost:8161/admin/ win10的启动avtivemq E:\Program Files\ActiveMQ\apache-activemq-5.15.3\bin\win64 win64里面的activemq.bat 消息队列的学习 学习地址2 这是spring集合activemq的地址:github pom.xml引入的依赖&a…

CS Tip 16: 利用注释

译自: http://soup.co.za/weblog/archive/2006/04/07/CS-Tip-16_3A00_-Commenting-out-controls.aspx 当您在修改皮肤时您可以修改任何HTML标记,但是除了带有runat"Server"的除外,删除掉将会产生错误 如果您不想某个控件显示在页面上您可以注释…

今天没有浪费时间,我努力了

7月12日经过暴雨洗礼过的清晨,我晚起了一会,我伧促的洗了把脸,瞪起朦胧胧的双眼,迈着疲惫步子,重复着这条凌乱的街道,10分钟多一点,我就到了公交站点,像往常一样,挤上了8…

动态规划——洛谷_P1057传球游戏

题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球&…

多线程1(进程、[创建]线程与生命周期)

一、进程与线程 什么是进程?我们先说说什么是程序? 程序(Program)是为实现特定目标或解决特定问题而用计算机语言(比如Java、C等)编写的命令序列的集合。 进程(process)就是指一个程…

网络操作系统第四章

1. 磁盘的数据结构包括哪些内容? 答:分区,卷,磁盘分区,主分区,扩展分区,逻辑分区,逻辑驱动器,引导分区。 2. 什么是基本磁盘和动态磁盘? (…

广播风暴系列专题(一)广播风暴:发现-端口

近日防火墙经常地检测到"svchost UDP/连入192.168.1.255/137 192.168.1.66/137 1055656/1065732 UDP_WAIT 过滤 8:48:31 C:\WINDOWS\system32\svchost.exe";"services UDP/连出 192.168.1.21/137 192.168.1.255/137 920736/913476 UDP_WAIT 过滤 11:46:3…

显示一个顶层的提示信息

vb里常作,大概的思路就是显示一个顶层的窗体,提示暂时不要动。c#里更简单了MsgDlg msgnewMsgDlg(); msg.TopMosttrue; msg.Show(); System.Windows.Forms.Application.DoEvents();

ArcGIS Engine开发-TOCControl中实现图层的拖放

TOCControl非常好,不用写一行代码就可以将整个地图的图层信息况显示出来;TOCControl也非常坏,提供的接口非常少,我认为有用的只有三个:HitTest,SetBuddyControl,Update,而且Update方法一执行,整…

多线程2(常用的方法:join、interrupt、currentThread、isAlive、setDaemon...)

常用的方法: 1、join()方法:join()方法:执行该方法的线程进入阻塞状态,直到调用该方法的线程结束后再由阻塞状态转为就绪状态。 示例: package venus;import java.util.Date;public class Test {public static void m…

Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】

前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了…那么本篇主要总结关于Oralce视图、序列、事务的一些内容… 在数据库中,我们可以把各种的SQL语句分为四大类… (1)DML(数据操纵语言&#xff…

物联网应用介绍

•物联网的研究背景(概念 | 本质 | 特征 | 发展现状)物联网是新一代信息技术的高度集成和综合运用,已成为全球新一轮科技革命与产业变革的核心驱动和经济社会绿色、智能、可持续发展的关键基础与重要引擎。国家十三五规划纲要明确提出“积极推…

Oracle使用手册(三)---存储过程与触发器

--存储过程/**//*--1.过程的语法结构--参见:http://newland.cnblogs.com/archive/2006/04/05/367531.html--2.执行存储过程begin 存储过程名;end;--创建好的存储过程可以被任何程序调用*/--3.带参数的存储过程/**//* 参数类型 在PL/SQL过程中,可以有3种类型的…

数据结构之【线性表】(顺序表、链表的基本操作实现)

概念线性表:是N个数据元素的有限序列。 顺序表:用一组地址连续的存储单元依次存储【线性表 】的数据元素。(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储【线性表…

基于android的天气预报的设计与实现

目录 应用开发技术及开发平台介绍应用需求分析应用功能设计及其描述应用UI展示①开发技术: 本系统是采用面向对象的软件开发方法,基于Android studio开发平台,以Android作为本系统的开发语言实现音乐播放器预定的需求功能。 ②平台介绍 硬件平…

敏捷开发有感!

http://sd.csdn.net/n/20060913/94713.html1.我们最优先要做的是通过尽早的,持续的交付有价值的软件来使客户满意。有一篇文章分析了对于公司构建高质量产品方面有帮助的软件开发实践,其中一个实践表明尽早的交付具有部分功能的系统和系统质量之间具有很…

ng 表单提交验证

http://www.runoob.com/try/try.php?filenametry_ng_validate 转载于:https://www.cnblogs.com/alvin553819/p/7127226.html

Infragistics NetAdvantage 2006 Volume 2 CLR 2.0曲折安装

上个月看到Infragistics NetAdvantage 2006 Volume 2 CLR 2.0(新特性)新鲜出炉,就一直想安装试用。昨天qq上得知已经有人在使用了,赶紧google一个down下来。经过漫长下载等待,满怀希望安装,哪想到快完成的时候居然报错&#xff0c…

数据结构之【栈】的基本操作C语言实现

引题: 很多人都把【栈】描述成【弹匣】,但我总感觉有点不恰当,因为弹匣从上端【装弹】之后,子弹总是在匣的上层;而元素【进栈】之后,总在栈的下面。 我觉得还是描述成【从下往上向书箱里一层…

编码小记(未整理-持续更新)

----------------基本概念-------------------------------一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。 二.字节 字节(Byte)是一…

使用locate 的正则查询 查找所有main.c

locate支持正则查询的功能, 只需输入locate -r 正则表达式 即可。 现在我想查找所有main.c怎么做? 打开终端,输入shell: locate -r main.c$ PS:$表示结束字符串结束。转载于:https://www.cnblogs.com/the-one/p…

My Favorites

AJAX "Atlas" Control Toolkit HomePage "Atlas" Client Class Library "Atlas" Server Class Library ASP.NET AJAX Roadmap http://www.ajaxian.com 被成为AJAX第一站 . http://www.ajaxmatters.com/ 不仅有讨论XMLHttpRequest 的文…

数据库事务初探

使用事务级别要慎重: 因为事务级别越高,数量越多、限制性更强的锁就会被运用到数据库记录或者表中。同时,更多的锁被运用到数据库和它们的覆盖面越宽,任意两个事务冲突的可能性就越大。 如果有一个冲突(例如两个事务试图获取同一个…

数据结构之【队列】的基本操作C语言实现

直接上图: 循环队列的声明: 0、循环队列的声明 循环队列的基本操作: 1、InitQueue(&Q)(构造一个空队列) 2、DestroyQueue(&Q)(销毁队列Q) 3、ClearQueue(&Q)(清空队列Q&…

在python3环境安装builtwith模块

1、安装命令: pip install builtwith 如果在命令行提示如下错误: Fatal error in launcher: Unable to create process using " 使用如下命令: python3 -m pip install builtwith 2、导入模块会出现错误提示: 原因&#xff1…

kettle组件-输出

1:删除连接数据库:新建连接数据库,或者应用转换中已经定义好的数据库。目标模式:指什么现在还不明确,集群模式?子服务器模式?--要写入数据的表的Schema名称。允许表名中包含“.”是很重要的。目…

NGOSS的一点简单概念

NGOSS(Next Generation Operational Support Systems)是由TMF(Tele Management Forum)提出的,他用于电信领域,是构建下一代OSS/BSS系统的框架。TMF提供了技术中立构架(TNA)作为NGOSS…

Windows Mobile 5.0 设备的目录变化

自定义铃声的默认两个存放位置:1. Application Data\Sounds (不是Storage下的Application Data了)。2. 外存储设备的根目录。

第二周期的第一次站立会议

今天:对这一阶段的任务进行了分配,我就自己的任务内容搜集了一些资料,尝试了编程。明天:继续进行编程。遇到的问题:编程方面有些许的困难。转载于:https://www.cnblogs.com/guantianhuan/p/10051436.html

常见的函数式编程模型

1.闭包(Closure) 闭包的概念 可以保留局部变量不被释放的代码块,被称为一个闭包。 闭包的特点:函数嵌套函数、内部函数可以引用外部函数的参数和变量、参数和变量不会被垃圾回收机制收回 // 创建一个闭包 function makeCounter() …