注解(annotation)概述:

·从JDK5.0 开始,java增加了对元数据(MetaData)的支持,也就是Annotation(注解)

·Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。

·Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的“name=value”对中。

·Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据

基本的Annotation:

·使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素

·三个基本的Annotation:

1.@ Override:限定重写父类方法,该注释只能用于方法

2.@ Deprecated:用于表示某个程序元素(类,方法等)已过时

3.@ SuppressWarnings:抑制编译器警告

自定义Annotation:

·定义新的Annotation类型使用@interface关键字

·Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。

·可以在定义Annotation的成员变量时为其制定初始值,指定成员变量的初始值可使用default关键字

例:

public @interface MyAnnotation{

    String name() default "liang"

}

·没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation

提取Annotation信息:

·JDK5.0 在java.lang.reflect 包下新增了AnnotationElement接口,该接口代表程序中可以接受注解的程序元素

·当一个Annotation类型被定义为运行时可见,当class文件被载入时保存在class文件中的Annotation才会被虚拟机读取

·程序可以调用AnnotationElement对象的如下方法来访问Annotation信息

JDK的元Annotation:

·JDK的元Annotation用于修饰其他Annotation定义

·JDK5.0 提供了专门在注解上的注解类型,分别是:

1.Retention

2.Target

3.Documented

4.Inherited

·@Retention:只用用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention时必须为该value成员变量指定值:

1.RetentionPolicy.SOURCE:编译器直接直接丢弃这种策略的注释

2.RetentionPolicy.CLASS(默认):编译器会把注释记录在class文件中。当运行java程序时,JVM不会保留注解。这是 默认值

3.RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中。当运行java程序时,JVM会保留注释。程序可以通过反射获取该注释。

·@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于哪些程序元素。@Target也包含了一个名为value的成员变量。

@Documented:用于指定被该元Annotation修饰的Annotation类江北javadoc工具提取成文档。

1.定义为Documented的注解必须设置Retention值为RUNTIME。

·@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解(实际应用中,使用较少)。

 1 package com.demo;
 2 /*
 3  *
 4  * 如何自定义一个注解
 5  * 元注解
 6  */
 7 public class TestAnnotation {
 8     public static void main(String[] args) {
 9         Person p = new  Student();
10         p.walk();
11     }
12 }
13
14 class Student extends Person{
15
16     @Override
17     public void walk() {
18         System.out.println("学生走路");
19     }
20     @Override
21     public void eat() {
22         super.eat();
23     }
24 }
25 class Person{
26     @MyAnnotation(value="liang")
27     String name;
28     int age;
29
30     public Person() {
31     }
32     public Person(String name, int age) {
33         super();
34         this.name = name;
35         this.age = age;
36     }
37     public void walk(){
38         System.out.println("走路");
39     }
40     @Deprecated
41     public void eat(){
42         System.out.println("吃东西 ");
43     }
44     @Override
45     public String toString() {
46         return super.toString();
47     }
48
49 }

 1 package com.demo;
 2
 3 import java.lang.annotation.Retention;
 4 import java.lang.annotation.RetentionPolicy;
 5 import java.lang.annotation.Target;
 6 import java.lang.reflect.Field;
 7 import java.lang.annotation.ElementType;
 8 //自定义的注解
 9 @Target({ElementType.FIELD})
10 @Retention(RetentionPolicy.RUNTIME)
11 public @interface MyAnnotation {
12         String value() default "Hello";
13 }

转载于:https://www.cnblogs.com/liangxiaoyu/p/5119905.html

Annotation注解(有源代码)相关推荐

  1. 自定义Android注解Part2:代码自动生成

    上一期我们已经把butterknife-annotations中的注解变量都已经定义好了,分别为BindView.OnClick与Keep. 如果你是第一次进入本系列文章,强烈推荐跳到文章末尾查看上篇 ...

  2. java 中的 Annotation 注解学习笔记

    java 中的 Annotation 注解 什么是注解 元注解 @Target @Retention @Document @Inherited 自定义注解 什么是注解 Annotation 是从JDK ...

  3. 详解Dart中如何通过注解生成代码

    简介:详解dart与java注解生成代码异同点 作者:闲鱼技术-龙湫 1.背景 最近在项目中使用到了Dart中的注解代码生成技术,这跟之前Java中APT+JavaPoet生成代码那套技术还是有一些不 ...

  4. java annotation入门_JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  5. Java反射学习总结五(Annotation(注解)-基础篇)

    Annotation(注解)简单介绍: 注解大家印象最深刻的可能就是JUnit做单元測试,和各种框架里的使用了. 本文主要简介一下注解的用法,下篇文章再深入的研究. annotation并不直接影响代 ...

  6. java 注解 target_详解JDK 5 Annotation 注解之@Target的用法

    前言 目前,越来越多的架构设计在使用注解,例如spring3.0.struts2等框架.让我们先来看看注解的定义.如下是一段使用了JDK 5 Annotation @Target的代码: @Targe ...

  7. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...

  8. SpringAOP 注解方式代码示例

    SpringAOP 注解方式代码示例 package com.zf.aspect;import org.aspectj.lang.JoinPoint; import org.aspectj.lang. ...

  9. java bean 工厂模式_通过annotation(注解)实现BeanFactory工厂模式(三)

    工厂模式是大家熟知的一种设计模式,在spring BeanFactory将这模式运用自如. 前面讲过如果通过xml配置的方式实现,今天我们来讲讲如何通过注解的方式实现工厂模式. 主要思路 扫描clas ...

最新文章

  1. Opengl-帧缓冲(一个新的缓冲对象,想一下深度和模板缓冲)
  2. Mbatis是什么?怎么运行?
  3. BTC36 CLUB国际基金拟向美国SEC提交那斯达克股票上市申请
  4. 用Redis实现Session功能
  5. spss无法连接到本地计算机,通过远程连接打开SPSS产品时,收到许可证错误信息。从本地打开同一产品时没有错误。...
  6. linux使用163的yum源配置
  7. 2020数学建模国赛A题 炉温曲线 心得
  8. 二维码扫码支付实现方案(仅供自己参考)
  9. 《IT项目经理成长手记》读后感
  10. 解决在SQLYog中执行SQL语句会提示错误的信息,但数据能查出来
  11. 北京烤鸭+腊肉炒花菜+香椿炒蛋
  12. 云服务器到底是什么?云服务器的优势有哪些
  13. RAID 0、RAID1、RAID5、RAID10的区别
  14. Java集合有哪些?
  15. 熵、条件熵、联合熵、互信息的理解
  16. Tensorflow学习之tf.keras(一) tf.keras.layers.Model(另附compile,fit)
  17. Tomcat 7.0安装与配置
  18. 杠杆平台的炒股技巧是什么?
  19. 如何熟悉一个完全陌生的系统
  20. 测试软件之显示器测试-DisplayX

热门文章

  1. 如何在Mac下显示Finder中的所有文件
  2. 计算机的起源英语作文,冰箱的起源英语作文
  3. sklearn快速入门教程:(三)机器学习的通用模式及实现方法
  4. 完全用Linux工作,抛弃windows
  5. linux gdb#039;查找寄存器地址,【Linux跟踪和调试】gdb
  6. 将.NET概念映射到Lightning平台
  7. CososJS学习笔记(1) 环境配置(填坑版,让你少走弯路!)
  8. Java 技术篇 - 前端浏览器发送一次url请求后端ServerSocket接收到两次请求原因及解决方法,GET /favicon.ico HTTP/1.1问题处理
  9. [YTU]_2759( 字符串---统计元音)
  10. 1.3 matlab常用的内部数学函数