Java注解详细介绍

 更新时间:2014年09月19日 09:31:13   投稿:junjie  
这篇文章主要介绍了Java注解详细介绍,本文讲解了Java注解是什么、Java注解基础知识、Java注解类型、定义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"符号(@),其次是注解类型. 这是最简单的注解形式. 另外,你可以在使用注解时,在名字后面加上小括号,里面附上需要传递的参数. 后面你会看到他们的示例:

定义注解类型示例: (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).

相关文章

  • java创建excel示例(jxl使用方法)

    java创建excel示例(jxl使用方法)

    Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新 已经存在的Excel文件。下面是使用方法,包括去掉网格线、字体设置、单元格设置、对齐方式等设置
    2014-03-03
  • java8 List<Object>去掉重复对象的几种方法

    java8 List<Object>去掉重复对象的几种方法

    本文主要介绍了java8 List<Object>去掉重复对象的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Spring Boot 指定外部启动配置文件详解

    Spring Boot 指定外部启动配置文件详解

    在springboot项目中,也可以使用yml类型的配置文件代替properties文件。接下来通过本文给大家分享Springboot配置文件的使用,感兴趣的朋友一起看看吧
    2021-09-09
  • 排序算法图解之Java插入排序

    排序算法图解之Java插入排序

    插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。本文通过图片合示例讲解了插入排序的实现,需要的可以了解一下
    2022-11-11
  • Java读写.properties文件解决中文乱码问题

    Java读写.properties文件解决中文乱码问题

    这篇文章主要介绍了Java读写.properties文件解决中文乱码问题,非常具有实用价值,需要的朋友可以参考下
    2017-11-11
  • 详解Java8的groupBy实现集合的分组

    详解Java8的groupBy实现集合的分组

    这篇文章主要介绍了详解Java8的groupBy实现集合的分组,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 关于LocalDateTime使用详解

    关于LocalDateTime使用详解

    这篇文章主要介绍了关于LocalDateTime使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java多线程实战之交叉打印的两种方法

    Java多线程实战之交叉打印的两种方法

    今天小编就为大家分享一篇关于Java多线程实战之交叉打印的两种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Eclipse配置SVN的几种方法及使用详情

    Eclipse配置SVN的几种方法及使用详情

    这篇文章主要介绍了Eclipse配置SVN的几种方法及使用详情,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 一文带你彻底了解Java8中的Lambda,函数式接口和Stream

    一文带你彻底了解Java8中的Lambda,函数式接口和Stream

    这篇文章主要为大家详细介绍了解Java8中的Lambda,函数式接口和Stream的用法和原理,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08

最新评论