Java注解基础概念总结

原创 2016年08月04日 10:08:58

注解的概念

注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations。注解与类、接口、枚举在同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中,用来对这些元素进行说明注释。

注解的语法与定义形式

(1)以@interface关键字定义
(2)注解包含成员,成员以无参数的方法的形式被声明。其方法名和返回值定义了该成员的名字和类型。
(3)成员赋值是通过@Annotation(name=value)的形式。
(4)注解需要标明注解的生命周期,注解的修饰目标等信息,这些信息是通过元注解实现。

以 java.lang.annotation 中定义的 Target 注解来说明:

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

源码分析如下:
第一:元注解@Retention,成员value的值为RetentionPolicy.RUNTIME。
第二:元注解@Target,成员value是个数组,用{}形式赋值,值为ElementType.ANNOTATION_TYPE
第三:成员名称为value,类型为ElementType[]
另外,需要注意一下,如果成员名称是value,在赋值过程中可以简写。如果成员类型为数组,但是只赋值一个元素,则也可以简写。如上面的简写形式为:

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

注解的分类

注解的分类有两种分法:

第一种分法

1、基本内置注解,是指Java自带的几个Annotation,如@Override、Deprecated、@SuppressWarnings等;

2、元注解(meta-annotation),是指负责注解其他注解的注解,JDK 1.5及以后版本定义了4个标准的元注解类型,如下:

  • @Target
  • @Retention
  • @Documented
  • @Inherited

3、自定义注解,根据需要可以自定义注解,自定义注解需要用到上面的meta-annotation

第二种分法

注解需要标明注解的生命周期,这些信息是通过元注解 @Retention 实现,注解的值是 enum 类型的 RetentionPolicy,包括以下几种情况:

public enum RetentionPolicy {
    /**
     * 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃.
     * 这意味着:Annotation仅存在于编译器处理期间,编译器处理完之后,该Annotation就没用了
     */
    SOURCE,

    /**
     * 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期.
     */
    CLASS,

    /**
     * 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在,
     * 保存到class对象中,可以通过反射来获取
     */
    RUNTIME
}

元注解

如上所介绍的Java定义了4个标准的元注解:

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

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

@Inherited:标记注解,允许子类继承父类的注解

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

@Retention:指Annotation被保留的时间长短,标明注解的生命周期,3种RetentionPolicy取值含义上面以说明

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

@Target:标明注解的修饰目标,共有

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

// ElementType取值
public enum ElementType {
    /** 类、接口(包括注解类型)或枚举 */
    TYPE,
    /** field属性,也包括enum常量使用的注解 */
    FIELD,
    /** 方法 */
    METHOD,
    /** 参数 */
    PARAMETER,
    /** 构造函数 */
    CONSTRUCTOR,
    /** 局部变量 */
    LOCAL_VARIABLE,
    /** 注解上使用的元注解 */
    ANNOTATION_TYPE,
    /** 包 */
    PACKAGE
}


参考文章:

反射、注解与依赖注入总结

注解系列知识总结(一)

Java面试基础概念总结

前段时间由于忙于修改论文,就好久没更新博客,现在准备重新开始记录自己的屌丝人生。哈哈 面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改;代码之间可以复用;增强代码的可靠性、灵活性和可理...
  • zjwcdd
  • zjwcdd
  • 2016年07月05日 13:02
  • 7524

JavaWEB基础知识总结

什么是WEB、WEB服务器有什么用、如何开发WEB应用以及tomcat 的使用
  • Z_HaiSome
  • Z_HaiSome
  • 2016年10月26日 19:44
  • 310

计算机网络基础知识总结

主题 概要 网络基础 网络知识的常用概念,常用协议,分层结构 编辑 时间 新建 20160727 序号 参考资料 1 鸟哥的linux...
  • shaozhenged
  • shaozhenged
  • 2016年07月27日 17:25
  • 710

Java学习的基础概念和知识点

static 1、随着类的加载而加载 2、优先于对象存在 3、被所有对象所共享 4、可以直接被类名调用 使用注意: 1、静态方法只能访问静态成员 2、非静态成员可以访问静态成员 3、静态方法中不可以...
  • wj610671226
  • wj610671226
  • 2016年08月15日 21:45
  • 1071

Java 各种概念总结--持续更新中

Java是OOP语言,所有的OOP语言都有三个特性:封装、多态、继承。 封装 封装是一种将代码与它所处理的数据结合起来,而不被外界干扰滥用的程序设计机制。 在Java中,基本封装单元是类,数...
  • john_lw
  • john_lw
  • 2017年05月08日 11:02
  • 254

Java中的注解基础

一、元注解 元注解的作用就是负责注解其他注解。1.@Target @Target用来指明注解所修饰的目标,包括packages、types(类、接口、枚举、Annotation类型)、类型成员(方...
  • hp910315
  • hp910315
  • 2016年04月19日 15:45
  • 1141

Java注解基础概念总结

注解的概念 注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations。注解与类、接口、枚举在同一...
  • qq_31150365
  • qq_31150365
  • 2017年07月13日 11:04
  • 71

Java注解基础概念总结

http://blog.csdn.net/github_35180164/article/details/52107204 http://blog.csdn.net/github_3518016...
  • u011904605
  • u011904605
  • 2016年12月15日 14:49
  • 114

java注解基础概念总结

1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; 2、RetentionPolicy.CLASS:注解被保留到clas...
  • hypmxy
  • hypmxy
  • 2017年05月24日 14:49
  • 95

JAVA一些基础概念

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表...
  • zheng__jun
  • zheng__jun
  • 2016年08月22日 21:43
  • 5945
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java注解基础概念总结
举报原因:
原因补充:

(最多只允许输入30个字)