1、概述

      1.1  JDK1.5开始,java提供了对Annotation的支持;

      1.2  Annotation其实就是 代码中的特殊标记,这些标记 可以在编译、类加载、运行时被读取,并执行相应的处理;

      1.3  提供使用Annotation,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息;

      1.4  Annotation本质上就是一个接口;

             从某些方面看,Annotation就像修饰符一样被使用在类、构造器、方法、属性等;

      1.5  Annotation作用:为  程序元素(类、成员变量、方法等)设置元数据;

      1.6  Annotation本身并不能影响程序的执行,无论新增、删除Annotation,代码都始终一样执行;

             如果希望Annotation在程序运行时起到一定作用,需要使用  (访问和处理Annotation的工具) APT 对Annotation中的信息进行访问、处理;

      1.7  Annotation必须使用工具处理,工具负责提取Annotation中的元数据,工具还会根据这些元数据提供额外的功能;

      1.8  Annotation的使用

            在Annotation名称前使用@,并将其当做修饰符使用,用于修饰指定的程序元素;

2、JDK提供的3个Annotation(java.lang包下)

      2.1  @Override

              子类中的方法被@Override修饰时,编译器会去父类找对应的方法,如果没有则编译出错;

      2.2  @Deprecated

              当程序元素被@Deprecated修饰,当使用到此元素时,编译器会给出警告;

      2.3  @SuppressWarnings

              被@SuppressWarnings标识的程序元素   取消显示 编译器的警告;

package com.an.annotation;

public class Test {

    //++++++++++++++@Override
public void say(){ } class A extends Test{
//编译器 去父类中是否有say方法,没有编译报错
@Override
public void say(){ }
} //++++++++++++++@Deprecated
@Deprecated
public void jump(){ }
@SuppressWarnings(value = "unchecked")
public static void main(String[] args){
new Test().jump();
} }

3、JDK提供的4个Annotation(java.lang.annotation包下)

      3.1  用于修饰  其他的Annotation;

      3.2  @Retention

              作用:指定该Annotation可以保留多长时间;

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

              包含一个成员变量value,使用时必须为value赋值;

              value值的种类:

                  

      3.3  @Target

              作用:指定  被修饰的Annotation   可以用于程序的哪些元素;             

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

              有一个成员变量value,使用时必须对value赋值;

              value值的类型:

                  

      3.4  @Documented

             作用:被@Documented修饰的Annotation  在使用时,将被javadoc工具提取成文档;            

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

      3.5  @Inherited

             作用:被@Inherited修饰的Annotation  使用时,使用此Annotation的类的子类将均有该注解;

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

  

4、自定义Annotation类型

      4.1  Annotation定义

            在Annotation名称前加@interface     eg:public @interface Test{}

      4.2  自定义、使用

package com.an.annotation;

import java.lang.annotation.*;

@Inherited
@Documented
@Retention(value = RetentionPolicy.RUNTIME)
public @interface TestOne {
}

  

package com.an.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; @Retention(value = RetentionPolicy.RUNTIME)
public @interface TestTwo {
}

   

package com.an.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; @Retention(value = RetentionPolicy.RUNTIME)
public @interface MyTest {
//使用default定义初始值
String name() default "jack";
int age() default 12;
String sex(); class Test{
//如果指定默认值,则无需赋值
@MyTest(sex = "female")
@TestOne
@TestTwo
public void hi(){ }
}
}

 

package com.an.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method; public class GetAnnotationTest {
@MyTest(sex = "female")
@TestOne
@TestTwo
public void say(){ } public static void main(String[] args)throws Exception{
Class testClass=Class.forName("com.an.annotation.GetAnnotationTest");
Method method =testClass.getMethod("say");
Annotation[] annotations =method.getAnnotations();
for (Annotation annotation:annotations){
System.out.println(annotation);
}
}
} 结果: @com.an.annotation.MyTest(name=jack, age=12, sex=female)
@com.an.annotation.TestOne()
@com.an.annotation.TestTwo()

  

 

JavaSE---Annotation的更多相关文章

  1. Java 注解机制

    一.注解中的信息已经在Class中了,我们应该如何读取出来 java.lang.reflect.AnnotatedElement接口: public Annotation[] getAnnotatio ...

  2. Spring——原理解析-利用反射和注解模拟IoC的自动装配

    解析Spring的IoC容器基于注解实现的自动装配(自动注入依赖)的原理 1.本文案例 使用注解和反射机制来模拟Spring中IoC的自动装配功能 定义两个注解:@Component,用来标注组件:@ ...

  3. JavaSE学习笔记--Item1 注解Annotation

    从 JDK 5.0 開始, Java 添加了对元数据(MetaData) 的支持, 也就是 Annotation(注解). 什么是Annotation,以及注解的作用? 三个主要的 Annotatio ...

  4. Java Annotation概述

    @(Java)[Annotation|Java] Java Annotation概述 用途 编译器的相关信息,如用于检测错误和一些警告 编译时和部署时的处理,如一些软件用于自动生成代码之类的 运行时处 ...

  5. 用大白话聊聊JavaSE -- 自定义注解入门

    注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如 ...

  6. javaSE学习路线

    Java SE大致可分为以下几块内容: n  对象导论:如何用面向对象的思路来开发 n  深入JVM:Java运行机制以及JVM原理 n  面向对象的特征:封装.继承.抽象.多态 n  数组和容器:容 ...

  7. 深入理解Java:注解(Annotation)基本概念

    转自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 什么是注 ...

  8. Annotation实战【自定义AbstractProcessor】

    前言 在使用Java的过程中,每个开发人员都接触过@Override, @Deprecated等等各式各样的注解,这些东西是java最基础的一些原生定义好的annotation.本文通过一个实例演示如 ...

  9. Java Annotation 机制源码分析与使用

    1 Annotation 1.1 Annotation 概念及作用      1.  概念 An annotation is a form of metadata, that can be added ...

  10. JAVA提高五:注解Annotation

    今天我们学习JDK5.0中一个非常重要的特性,叫做注解.是现在非常流行的一种方式,可以说因为配置XML 比较麻烦或者比容易查找出错误,现在越来越多的框架开始支持注解方式,比如注明的Spring 框架, ...

随机推荐

  1. mysql 生成max+1编号

    #sql info表插入一条数据,number字段根据info表最大number+1插入,若为初始插入,number为100000#在获取本表number最大值时,mysql不允许直接查询本表获取最大 ...

  2. poj 2186: Popular Cows(tarjan基础题)

    题目链接 tarjan参考博客 题意:求在图上可以被所有点到达的点的数量. 首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG). 在这个DAG上,若存在不止 ...

  3. idea将本地项目推送到git远程库

    如何将本地项目推送到github远程仓库? 1. 在github上创建一个仓库,取名mybatis 2. 在idea中将项目交由git管理 注意,文件名会变红了, 说明这些文件在git工作区,但还没规 ...

  4. BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)

    传送门 解题思路 \(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通.算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达 ...

  5. WORM Worm worm 毛毛虫爬树爬树~

    对于动态规划,我也就不多说了.因为还不会, 每个题都不一样,但大致原则是一样的.抓住题意, 本题:n棵树,毛毛虫在m分钟内从p到t的路线种数,毛毛虫只可以向左右相邻位置走. 中心代码: for(i = ...

  6. angualr项目引入容联 七陌7mroo

    最近项目要求在注册页面增加客服服务浮窗,各种查找资料准备采用7moor来实现.现记录一下实现过程,便于后期查看: 引入7moor浮窗有两种方式: 1.h5方式,这种情况一般是单独打开新页面即可: 直接 ...

  7. linux下使用lftp的小结

    今天在解决一个远程服务器备份的问题时,用到了lftp的相关知识.整理如下: lftp的功能比较强大,相比原来用ftp,方便了很多. 1.登陆: lftp ftp://yourname@site pwd ...

  8. ROM、RAM、DRAM、SRAM、FLASH的区别?

    在学习单片机的时候经常会被这些东西搞晕掉,什么ROM RAM FLASH EEPROM 等等......为了不被搞晕,做个笔记,不记得的时候过来看看. 下面是我在网上找的资料: ROM和RAM指的都是 ...

  9. 非常全的Linux基础知识点

    Linux是每个后端程序员必须要掌握的系统,今天小编就给你分享一篇Linux基础知识点大全,看看你知道多少? 一. 从认识操作系统开始 1.1 操作系统简介 我通过以下四点介绍什么操作系统: 操作系统 ...

  10. Java反射实现Servlet处理多个请求--server分发

    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.serv ...