Java注解(一):初识Java注解

参考:http://www.cnblogs.com/skywang12345/p/3344137.html

   http://www.cnblogs.com/taoxiaoji/archive/2011/01/19/1939651.html

      http://blog.csdn.net/tigerdsh/article/details/8848890

   http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

首先知道注解是什么,能干什么,在什么时候用?

1.是什么注解?

  即一种对数据的描述。为我们在代码中 添加信息 提供了一种 形式化 的 方法,是我们可以在 稍后 某个时刻 方便地使用这些数据(java虚拟机 通过 解析注解 来使用这些数据)。即它是一种对数据的描述。

2.注解能干什么?

  • 生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等
  • 跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。
  • 在编译时进行格式检查。如 @override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

   它也是一种注释,不过它不只有注释的意义。可能你会觉得有点抽象。我们还是使用 @override 举例,如果它标记了某个方法不是重写了它的父类的方法,那么在编译时就会报错。这不就是对方法(你可以理解方法也是一种数据)描述吗?这种描述相当于某种限定,超出限定会抛出相应的异常,可以更加快捷、方便的编码,减少代码量。

3.怎么用注解?

  3.1 注解的定义:使用 @interface

  modifiers @interface AnnotationName
  {
    element declaration1;
    element declaration2;
  }

    modifiers : private、public、protect、default

    AnnotationName:自定义注解的名称,类似于类名。

    element:注解元素的类型

    declaration1declaration2:注解元素的名称

  3.2 注解中元素的 声明 和 定义  

    注解参数的可支持数据类型:

      1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
      2.String类型
      3.Class类型
      4.enum类型
      5.Annotation类型
      6.以上所有类型的数组

   1. type elementName();

   2. type elementName() default value;

  看到这里,你已经知道如何自定义注解了吧。

  在创建自定义注解之前,我们先看看java中的 java.lang.annotation 包的类组成:

  

  1)Annotation:所有的注解 都继承 Annotation 接口,就相当于 Java 中的所有类,都是继承与 Object 类。

  2)AnnotationFormatError、AnnotationTypeMismatchException、IncompleteAnnotationException:这3个类都是 自定义异常

  3)ElementType、RetentionPolicy:两个枚举类型。

    ElementType:用于描述注解的使用范围,限定注解标记的对象,总共有 8 种。

public enum ElementType {
    //此值对应修饰:类,接口(包括注解类型),枚举类型
    TYPE,

    //此值对应修饰:属性(包括枚举常量)
    FIELD,

    //此值对应修饰:方法
    METHOD,

    //此值对应修饰:方法中的参数
    PARAMETER,

    //此值对应修饰:构造方法
    CONSTRUCTOR,

    //此值对应修饰:局部变量
    LOCAL_VARIABLE,

    //此值对应修饰:注解
    ANNOTATION_TYPE,

    //此值对应修饰:包
    PACKAGE
}

    RetentionPolicy:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

public enum RetentionPolicy {
     //注解将被编译器丢弃
    SOURCE,

    //注解在class文件中可用,但会被VM(虚拟机)丢弃
    CLASS,

    //VM(虚拟机)将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
    RUNTIME
}

  4)Target、Retention、Documented、Inherited:4个元注解,可能看到这里,不知到元注解是个什么东东?继续往下看。

    Target:用于限定 注解标记的对象。

    @Documented  
    @Retention(RetentionPolicy.RUNTIME)//限定
    @Target(ElementType.ANNOTATION_TYPE)//限定 Target 注解,只用标记 注解。
    public @interface Target {      ElementType[] value(); //Target注解的元素,类型为ElementType[],名称为 value
    }

     看到这里,你会发现 Target 注解的元素,是之前定义的枚举类型 ElementType的数组,里边可以是多个值。所以 Target 是用于 限定 注解 标记的范围,然后值是ElementType中的一个或者多个!

     那么元注解的定义:只能标记注解的注解,换句话说,所有的元注解只能标记注解,也就是 @Target 的值是 ElementType.ANNOTATION_TYPE

    Retention:用于限定 注解 的 在什么级别有效

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.ANNOTATION_TYPE)
    public @interface Retention {
        RetentionPolicy value();
    }

     跟 Target 类似,Retention注解中元素的值是枚举类型 RetentionPolicy 的值,值只能是 RetentionPolicy 的一个,only one !!!

    Documented:用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解没有成员

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.ANNOTATION_TYPE)
    public @interface Documented {
    }

    Inherited:是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

    注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.ANNOTATION_TYPE)
    public @interface Inherited {
    }

  到此,是不是对 java 注解 有一个初步的认识了,这肯定是不够的,最好的学习方法就是使用它!!!

  至于例子可以直接看这篇博客 (http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html)很详细!

  

时间: 2024-12-22 06:28:38

Java注解(一):初识Java注解的相关文章

Java 第一章 初识Java

第一章笔记 什么是计算机程序:算机为完成某些功能生产的一系列有序指令集合 Java技术包括: java SE:标准版 java EE:企业版 Java ME:移动版 开发Java程序步骤:1.编写 2.编译 3.运行 1.编写: a.大括号成对出现 b.class后面的单词要与文件名一致.(!!包括大小写) c.java严格区分大小写 2.编译: 命令:javac 文件名.java 产生结果:产生.class为后缀名的文件(此文件,看不懂,乱码) (注意!!!如果代码修改后,需重新编译后运行)

201671010113 2016-2017-2《Java程序设计》初识Java

这学期学习Java是我真正意义上第一次去接触.认识.了解这门高级计算机语言.上个学期时不时地会听到软件班的同学向我介绍Java,面向对象,封装.继承.多态,类,这些我虽然都还不了解,但是听得多了慢慢的我也就记住了一点,这学期拿到传说已久的那本厚厚的课本我也有担忧,害怕自己学不好,但是更多的是期待和向往,终于有一天我也有机会学习他们口中那个让人又爱又恨的Java了. 通过这一周的课程学习,我了解到了我们这一学期的学习方式和目标,反转课堂也是这么多年的学习生涯以来我的第一次尝试,说实话我很害怕,我的

阿花宝宝 Java 笔记 之 初识java

1.记事本开发一个Java程序  编写源程序   源程序以.java为后缀名  编译     javac  编译后生成的文件以.class为后缀名  运行     java 运行编译后生成的.class文件2.java程序框架public class Hello{ public static void main(String[] args){  //注释  System.out.println("HelloWorld!"); }}3.转义符       换行 \n           

java注解中的元注解

一:java注解中的元注解 四个元注解分别是:@Target,@Retention,@Documented,@Inherited , 再次强调下元注解是java API提供,是专门用来定义注解的注解,其作用分别如下: @Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括: ElemenetType.CONSTRUCTOR----------------------------构造器声明 ElemenetType.FIELD ----------------

【java开发系列】—— 自定义注解(转)

之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类. 注解都是什么呢?看下面这张图就明白了! 上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解 这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错

深入理解Java:注解(Annotation)--注解处理器

深入理解Java:注解(Annotation)--注解处理器 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器. 注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口.除此之外,Java在java.l

java基础巩固笔记(6)-注解

java基础巩固笔记(6)-注解 java基础巩固笔记6-注解 注解的应用结构图 元注解 自定义注解 示例代码 参考资料 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释. API Package java.lang.annotation 注解的应用结构图 调用/结构关系:A<–B<–C A,B,C解释如下: A:注解类

Java学习笔记十(注解)

1.介绍 注解是JavaSE5.0開始提供的一项新特性,利用此特性能够通过特定的注解标签为程序提供一些描写叙述性信息. 这些描写叙述性信息能够在编译或执行时为编译器.执行环境提供附加的信息.从而简化开发.  2.自己定义注解 1.声明自己的注解 @interface <注解名称>{<注解属性类型> <注解属性名称>[default<默认值>]} <span style="font-family:SimSun;font-size:18px;&q

java基础之:java注解

一:元注解 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: [email protected], [email protected], [email protected], [email protected] 这些类型和它们所支持的类在java.lang.annotation包中可以找到.下面我们看一下每个元注解的作用和相应分参数的使用说明. @Target: