Java注解详细介绍
作者:junjie 发布时间:2021-10-09 19:52:28
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"符号(@),其次是注解类型. 这是最简单的注解形式. 另外,你可以在使用注解时,在名字后面加上小括号,里面附上需要传递的参数. 后面你会看到他们的示例:
定义注解类型示例: (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-value类型的注解有多个数据成员. 因此,必须为每个成员使用完整的 data=value 语法格式传递参数.
定义:
public @interface FullValueAnnotation {
String doSomething();
int count;
String date();
}
使用:
@FullValueAnnotation (doSomething="参数值", count=1,
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).


猜你喜欢
- 一.前言这一篇来看看 SpringIOC 里面的一个细节点 , 来简单看看 BeanDefinition 这个对象 , 以及有没有办法对其进
- /// <summary> /// 通过IP得到IP所在地省市(Po
- 本文实例讲述了Android开发之绘制平面上的多边形功能。分享给大家供大家参考,具体如下:计算机里的3D图形其实是由很多个平面组合而成的。所
- 1.问题描述使用post方法调用上级联网厂家接口,返回http状态码415,返回信息Content type ‘appl
- SlidingDrawer效果想必大家也见到过,它就是1.5模拟器上进入应用程序列表的效果。下面是截图一、简介 SlidingDr
- (一)springboot web项目打jar包1、打包两种打包方式maven命令打包切换目录到工程根下,pom.xml所在位置,运行mav
- 源码地址:https://gitee.com/fighter3/eshop-project.git持续更新中……大家好,我是三分恶。这一节我
- Android开发文档上专门有一小节解释这个问题。简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configurat
- 目录Java 的Stream流一、定义二、操作的特征三、代码示例1、生成流2、forEach 迭代3、limit方法用于获取指定数量的流4、
- java String的深入理解一、Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和
- Spring5新功能一、@Nullable 注解@Nullable 注解可以使用在方法、属性、参数上,分别表示方法返回可以为空、属性值可以为
- macOS搭建Spring Boot开发环境,具体内容如下软硬件环境macOS Sierrajava 1.8.0_65maven 3.5.0
- .NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一系列可扩展的Cache框架,本文就简单的介绍一
- Java语言是简单的:Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使
- Java中的Runnable,Callable,Future,FutureTask的比较Java中存在Runnable、Callable、F
- 我们再用支付宝支付的时候,会从底部弹上来一个对话框,让我们选择支付方式等等,今天我们就来慢慢实现这个功能效果图实现主界面很简单,就是一个按钮
- 为了学习数据库,重装了系统,之前前一直在用eclipse,现在准备换成myeclipse,这之前当然需要重新设置环境变量,顺手写下有关jdk
- 前言由于刚写项目不久,在写 web 后台接口时,经常会对前端传入的参数进行一些规则校验,如果入参较少还好,一旦需要校验的参数比较多,那么使用
- @ConfigurationProperties实现类型安全的配置问题描述从之前@Value的使用,可以知道@Value可以灵活的把配置文件
- 前言本文主要给大家介绍的是关于Java通过Class类获取Class对象的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的