Java注解详细介绍

Java注解详细介绍

基于注解(Annotation-based)的Java开发无疑是最新的开发趋势.[译者注: 这是05年的文章,在2014年,毫无疑问,多人合作的开发,使用注解变成很好的合作方式,相互之间的影响和耦合可以很低].

基于注解的开发将Java开发人员从繁琐笨重的配置文件中解脱出来. Java 5.0中首次引入了注解,注解是这个JDK版本的特性之一,将程序员书写Java示例API文件的工作转交给了编译器. 当不再维护分开的源代码和API文档后,代码和文档会更容易维护. 生成的代码示例也不太可能包含错误.

Java注解是JDK 5中的主要特性之一,使开发变得更简单容易. 注解就像一种元信息(meta,可以理解为额外的信息,用来给特殊的程序看的),可以添加到代码中,可以被用到包(package)的声明,类型(type)声明、构造函数(constructors)、方法(methods)、属性域(fields)、参数(parameters)以及变量(variables)上. 他们提供一种有效的方式来指示方法是否依赖于其他方法,是否完整,类(class)是否引用其他类,等等.

引用 甲骨文公司的官方网站的说明 ,"它(基于注解的开发)可以让我们在很多时候不必再去写一份单独的API文档说明,只需要启用工具来从源码中的注解生成即可. 这形成了一种声明式的编程风格,程序员说,需要做什么,就让工具根据代码来做就好了."

简单来说,注解是一种将meta标记(meta-tag)与程序元素关联的机制,允许编译器(compiler)或JVM从有注解的元素提取程序行为,必要时生成相互依赖的代码.

在本系列文章的第一部分,我将介绍一些基本的Java注解,他们的用处(benefits),以及一些示例用法(usages).

Java注解基础知识

你需要了解两个地方. 一是"注解"(annotation, 类似于一个 new出来的对象)本身,二是"注解的类型"(annotation type, 类似于 class定义). 注解是一个meta标记,用在你的代码中,其实它是有生命周期和适用范围的. annotation type是用来定义注解的. 当你想要创建自己的注解时,你就会用到它. type才是实际使用的构造类型,注解只是那个类型的一个具体用法.

定义注解类型时需要使用一个"at"(@,国内有人读作圈a)标记,紧跟着是关键字 interface, 再加上注解的名字(name). 另一方面,使用注解的形式,也是先写上"at"符号(@),其次是注解类型. 这是最简单的注解形式. 另外,你可以在使用注解时,在名http://字后面加上小括号,里面附上需要传递的参数. 后面你会看到他们的示例:

定义注解类型示例: (Annotation Type,注解类型, 类似于定义一个类)

复制代码 代码如下:

public @interface MyAnnotation {

   String doSomething();}

在普通代码中使用注解(Annotation实例)

复制代码 代码如下:

@MyAnnotation (doSomething="What to do")

public void mymethod() {

   ....}

Java注解类型(Annotation Types)

有三种类型的注解:

标记(Marker): 标记类型的注解没有元素,只有一个名字.

定义:

复制代码 代码如下:

// 这种注解,就像一种标签, 没有状态

// 有点像没有方法定义的接口Serializable一样

public @interface AMarkerAnnotation {

}

使用:

复制代码 代码如下:

@AMarkerAnnotation

public void mymethod() {

   ....

}

单个元素的注解: 单个元素(Single-Element)或单个值 这种类型的注解,只带一个数据. 可以在括号内用 data=value 的方式表示,也可以只传递一个值(简便的写法).

定义:

复制代码 代码如下:

public @interface SingleElementAnnotation

{

    String doSomething();

}

使用:

复制代码 代码如下:

@SingleElementAnnotation ("可以只传对应类型的值")

public void mymethod() {

   ....

}

Full-value或多个值的注解: Full-valhttp://ue类型的注解有多个数据成员. 因此,必须为每个成员使用完整的 data=value 语法格式传递参数.

定义:

复制代码 代码如下:

public @interface FullValueAnnotation {

   String doSomething();

   int count;

   String date();

}

使用:

复制代码 代码如下:

@FullValueAnnotation (doSomething="参数值", count=1,

           &nbUexoNokekwsp;   date="09-09-2005")

public void mymethod() {

   ....

}

定义Java注解类型的注意事项

在定义注解类型时需要注意:

1.注解声明应该以一个at符号开始(@),后跟一个interface 关键字,以及注解的名字.

2.注解里面的方法声明,不接受任何参数(只是看起来像是方法而已,本质是属性域).

3.注解里面的方法声明不能有throws 子句.

4.注解里面的方法返回类型只能是下面这几种:

@primitives(6种原始数据类型,int,byte等)

@String(字符串)

@Class(类, 如 String.class 这种)

@enum(枚举)

@array of the above types(数组,数组元素只能是上面的一种类型)

Java注解类型

JDK5中有两种类型的注解:

1.Simple annotations(简单注解类型): 这些是 Tiger(Tiger是JDK1.5的代号?)提供的基本类型,只能用来注解普通代码;不能用来创建另一个自定义注解类型.

2.Meta annotations(元注解): 专门设计用来注解其他注解类型(annotation-type)声明的. 简单地说,他们被称为注解的注解(annotations-of-annotations).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/63095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hacksudo3 通关详解

环境配置 一开始桥接错网卡了 搞了半天 改回来就行了 信息收集 漏洞发现 扫个目录 大概看了一眼没什么有用的信息 然后对着login.php跑了一下弱口令 sqlmap 都没跑出来 那么利用点应该不在这 考虑到之前有过dirsearch字典太小扫不到东西的经历 换个gobuster扫一下 先看看g…

自然语言处理:长文本场景下的关键词抽取实践

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

HBase-读流程

创建连接同写流程。 (1)读取本地缓存中的Meta表信息;(第一次启动客户端为空) (2)向ZK发起读取Meta表所在位置的请求; (3)ZK正常返回Meta表所在位置&#x…

SpringBoot使用@Autowired将实现类注入到List或者Map集合中

前言 最近看到RuoYi-Vue-Plus翻译功能 Translation的翻译模块配置类TranslationConfig,其中有一个注入TranslationInterface翻译接口实现类的写法让我感到很新颖,但这种写法在Spring 3.0版本以后就已经支持注入List和Map,平时都没有注意到这…

自制免费 SQL 闯关自学网,代码开源!

大家好,我是鱼皮。 相信很多学编程的同学都学习过 SQL 吧?SQL 作为数据库查询语言,实在是太重要了,可以说是程序员、产品经理、数据分析同学的必备技能。 为了帮助大家自学 SQL,这段时间,我一个人做了个 …

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日,周三晚上 今天我看到了这样的两行代码: std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问: 为什么有时候用ios_base::o…

智慧城市规划新引擎:探秘数字孪生中的二维与三维GIS技术差异

智慧城市作为人类社会发展的新阶段,正日益引领着我们迈向数字化未来的时代。在智慧城市的建设过程中,地理信息系统(GIS)扮演着举足轻重的角色。而在GIS的发展中,二维和三维GIS作为两大核心技术,在城市规划与…

C#使用libmodbus库与工业设备进行读写测试

一.编译libmodbus库供C#使用 如何编译?请移步:https://blog.csdn.net/weixin_42205408/article/details/119530811 上面博主的文章除了所写的modbus.cs内的代码有点问题外(可能上面博主和我的Win 10 64位 Visual Studio 2019平台不一样吧&a…

Spring Boot集成Mybatis-Plus

Spring Boot集成Mybatis-Plus 1. pom.xml导包 <!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql驱动--><dependency><groupId>mysql<…

S系列数字源表为何如此受欢迎?

为什么选择S系列数字源表? 性能强大-作为电压源和或电流源&#xff0c;并同步测量电流和或电压&#xff0c;支持四象限工作。可以限定电压或电流输出大小&#xff0c;预防器件损坏。覆盖3pA-3A的电流范围100μV-300V的电压范围&#xff0c;全量程测量精度0.03%。 灵活多样-支…

数据结构 | 二叉树的应用

目录 一、解析树 二、树的遍历 一、解析树 我们可以用解析树来表示现实世界中像句子或数学表达式这样的构造。 我们可以将((73)*(5-2))这样的数学表达式表示成解析树。这是完全括号表达式&#xff0c;乘法的优先级高于加法和减法&#xff0c;但因为有括号&#xff0c;所以在…

今天面了一个来字节要求月薪24K,明显感觉他背了很多面试题...

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

python:isdigit()、isalpha()、isalnum() 三个函数的区别和注意点

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、isdigit() python关于 isdigit() 内置函数的官方定义&#xff1a; S.isdigit() -> bool Return True if all characters in S are digitsand there is at least one character in S, False otherwise.翻…

【开源项目--稻草】Day06

【开源项目--稻草】Day06 1. 学生提问与解答功能2. 显示create.html2.1 HomeController中代码2.2 复用网页的标签导航条 3. 创建问题发布界面3.1 富文本编辑器 4.多选下列框5.动态加载所有标签和老师6. 发布问题的业务处理 1. 学生提问与解答功能 学生提问: 提问时指定标签和回…

K8S系列文章 之 容器存储基础 Volume

Volume Volume是容器数据卷。我们经常创建删除一些容器&#xff0c;但有时候需要保留容器中的一些数据&#xff0c;这时候就用到了Volume。它也是容器之间数据共享的技术&#xff0c;可以将容器中产生的数据同步到本地。实际就是把容器中的目录挂载到运行着容器的服务器或个人…

云运维工具

企业通常寻找具有成本效益的方法来优化创收&#xff0c;维护物理基础架构以托管服务器和应用程序以提供服务交付需要巨大的空间和前期资金&#xff0c;最重要的是&#xff0c;物理基础设施会产生额外的运营支出以进行定期维护&#xff0c;这对收入造成了沉重的损失。 云使企业…

设计模式之策略模式(Strategy)

一、概述 定义一系列的算法&#xff0c;把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的类而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 2.需要使用一个算法的不同变体。…

Grafana V10 告警推送

最近项目建设完成&#xff0c;一个城域网项目&#xff0c;相关zabbix和grafana展示已经完&#xff0c;想了想&#xff0c;不想天天看平台去盯网络监控平台&#xff0c;索性对告警进行分类调整&#xff0c;增加告警的推送&#xff0c;和相关部门的提醒&#xff0c;其他部门看不懂…

Collections工具类(java)

文章目录 7.1 常用方法 参考操作数组的工具类&#xff1a;Arrays&#xff0c;Collections 是一个操作 Set、List 和 Map 等集合的工具类。 7.1 常用方法 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作&#xff0c;还提供了对集合对象设置不可变、…

基于Mediapipe的姿势识别并同步到Unity人体模型中

如题&#xff0c;由于是商业项目&#xff0c;无法公开源码&#xff0c;这里主要说一下实现此功能的思路。 人体关节点识别 基于Mediapipe Unity插件进行开发&#xff0c;性能比较低的CPU主机&#xff0c;无法流畅地运行Mediapipe&#xff0c;这个要注意一下。 Mediapipe33个人体…