------自定义注解元注解说明

  1. @Documented – 表示使用该注解的元素应被javadoc或类似工具文档化,它应用于类型声明,类型声明的注解会影响客户端对注解元素的使用。如果一个类型声明添加了Documented注解,那么它的注解会成为被注解元素的公共API的一部分。
    2.@Target – 表示支持注解的程序元素的种类,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
    取值(ElementType)有:
    (1)CONSTRUCTOR:用于描述构造器
    (2)FIELD:用于描述域
    (3)LOCAL_VARIABLE:用于描述局部变量
    (4)METHOD:用于描述方法
    (5)PACKAGE:用于描述包
    (6)PARAMETER:用于描述参数
    (7)TYPE:用于描述类、接口(包括注解类型) 或enum声明
    3.@Retention - 该注解表示需要在什么级别保存该注释信息,用于描述注解的生命周期
    取值(RetentionPoicy)有:
    (1)SOURCE:在源文件中有效(即源文件保留)
    (2)CLASS:在class文件中有效(即class保留)
    (3)RUNTIME:在运行时有效(即运行时保留)
    4.@Inherited - @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
    实例:
    (1)创建自定义注解
/*** @author sam* @since 2017/7/13*/@Target({ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface MyMessage {String name() default "sam";int num() default 0;String desc();}

(2)创建测试类,使用自定义注解

package com.sam.annotation;/*** @author sam* @since 2017/7/13*/public class AnnotationTest {@MyMessage(num = 10, desc = "参数a")private static int a;@MyMessage(name = "Sam test", desc = "测试方法test")public void test() {System.out.println("test");}}

(3)使用反射机制处理自定义注解

package com.sam.annotation;import java.lang.reflect.Field;import java.lang.reflect.Method;/*** 使用反射处理注解** @author sam* @since 2017/7/13*/public class MyMessageProcessor {public static void main(String[] args) {try {//加载annotationTest.class类Class clazz =  MyMessageProcessor.class.getClassLoader().loadClass("com.sam.annotation.AnnotationTest");//获取属性Field[] fields = clazz.getDeclaredFields();//遍历属性for (Field field : fields) {MyMessage myMessage = field.getAnnotation(MyMessage.class);System.out.println("name:" + myMessage.name() + "  num:" + myMessage.num() + "  desc:" + myMessage.desc());}//获取类中的方法Method[] methods = clazz.getMethods();//遍历方法for (Method method : methods) {//判断方法是否带有MyMessage注解if (method.isAnnotationPresent(MyMessage.class)) {// 获取所有注解 method.getDeclaredAnnotations();// 获取MyMessage注解MyMessage myMessage = method.getAnnotation(MyMessage.class);System.out.println("name:" + myMessage.name() + "  num:" + myMessage.num() + "  desc:" + myMessage.desc());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}}

程序员麦兜【编程笔记】-自定义注解实例讲解相关推荐

  1. 黑马程序员并发编程笔记(二)--java线程基本操作和理解

    3.java进程的基本操作 3.1.创建进程 方法一,直接使用 Thread // 构造方法的参数是给线程指定名字,,推荐给线程起个名字(用setName()也可以) Thread t1 = new ...

  2. 程序员的数学笔记3--迭代法

    第三节课程,介绍的是迭代法. 前两节笔记的文章: 程序员的数学笔记1–进制转换 程序员的数学笔记2–余数 03 迭代法 什么是迭代法 迭代法,简单来说,其实就是不断地用旧的变量值,递推计算新的变量值. ...

  3. 程序员的数学笔记2--余数

    上一节程序员的数学笔记1–进制转换是介绍了进制,特别是十进制和二进制之间的转换,移位操作和逻辑操作. 今天介绍的是余数,看完本节笔记,你会发现生活中有很多东西都有余数的影子. 余数 余数的特性 整数是 ...

  4. c++ 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》所感--关于变量的类型与引用

    最近在看陈黎娟的书<C.C++实践进阶之道,写给程序员的编程书>,其中第十一章讲的是变量和类型,现做笔记如下: 数据存储区域分只读数据区(存储常量和恒值,正常情况下不做修改).全局/静态存 ...

  5. python好学吗 老程序员-使用 Python 会降低程序员的编程能力吗?

    某些情况下会降低编程能力,某些情况下会提升编程能力,要看你怎么理解"编程能力". 1.使用 Python 会降低程序员的编程能力,这个假设成立的情形 如果强行要说使用Python可 ...

  6. 好程序员大数据笔记之:Hadoop集群搭建

    好程序员大数据笔记之:Hadoop集群搭建在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天 ...

  7. 如何向新手程序员介绍编程?

     如何向新手程序员介绍编程? 学习Java,他们都说很easy. 作为一名刚从斯康星大学麦迪逊分校计算机科学系毕业的大学生,我通过一些编程课程认识了很多使用Java的朋友.现在很多学校都在从别的编 ...

  8. c语言为什么有这么多的编程环境?_为什么98%的程序员学编程都会从C语言开始?...

    在互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢? 就让我来跟大家分享分享: 壹 第一:相比较其他的编 ...

  9. C/C++程序员的编程修养

    关注.星标公众号,不错过精彩内容 作者:陈浩 转自:嵌入式云IOT技术圈 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是.对于一些技术细节来说和底层的技术, ...

最新文章

  1. configure - 配置源代码树
  2. SpringAOP概念
  3. 经典DL论文研读(part3)--Improving neural networks by preventing co-adaptation of feature detectors
  4. 教你如何把自己从好友的QQ中删除
  5. Android加载自定义字体出错,盘点Android使用自定义字体遇到的坑
  6. js+canvas绘制360加速球
  7. 数字孪生可视化开发技术(ThingJS)学习笔记
  8. 第二章,用矩阵解线性方程组,01-高斯消元法
  9. 360插件化Replugin爬坑之路
  10. 发票查验API可以查验的发票类型有哪些?
  11. LaTeX入门|(1)从Word到LaTeX:LateX排版常用指令
  12. 主板各种插针接口与机箱(电源)的接法
  13. 基于JAVA个人交友网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署mp4
  14. UPRtek光谱仪维修LED光谱计维修MK350N
  15. java8新特性(2)-Lambda表达式
  16. oracle根据约束名查找具体信息,如是哪张表的哪个字段约束信息
  17. Linux下定时删除指定目下n天前的文件
  18. Simulink仿真入门到精通(五) Simulink模型的仿真
  19. web开发与应用(一)
  20. 基础面试题:java内存区域

热门文章

  1. 周杰伦新歌《说好不哭》上线,程序员哭了......
  2. python property类
  3. stm32中c语言换行符error——expect a declaration warning——“\“followed by white space is not a line splic
  4. Linux入门级教学-常见工具介绍及其使用
  5. RBL 列表查询网址
  6. 亚马逊免费服务器超时收费问题
  7. 饥荒机器人升级上限多少_饥荒里机器人属性最高升级到多少
  8. java filedescriptor_Java FileDescriptor sync()方法
  9. 有关创新的一些思考(原创)
  10. java 单例模式 泛型_单例模式 泛型