程序员麦兜【编程笔记】-自定义注解实例讲解
------自定义注解元注解说明
- @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();}}}
程序员麦兜【编程笔记】-自定义注解实例讲解相关推荐
- 黑马程序员并发编程笔记(二)--java线程基本操作和理解
3.java进程的基本操作 3.1.创建进程 方法一,直接使用 Thread // 构造方法的参数是给线程指定名字,,推荐给线程起个名字(用setName()也可以) Thread t1 = new ...
- 程序员的数学笔记3--迭代法
第三节课程,介绍的是迭代法. 前两节笔记的文章: 程序员的数学笔记1–进制转换 程序员的数学笔记2–余数 03 迭代法 什么是迭代法 迭代法,简单来说,其实就是不断地用旧的变量值,递推计算新的变量值. ...
- 程序员的数学笔记2--余数
上一节程序员的数学笔记1–进制转换是介绍了进制,特别是十进制和二进制之间的转换,移位操作和逻辑操作. 今天介绍的是余数,看完本节笔记,你会发现生活中有很多东西都有余数的影子. 余数 余数的特性 整数是 ...
- c++ 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》所感--关于变量的类型与引用
最近在看陈黎娟的书<C.C++实践进阶之道,写给程序员的编程书>,其中第十一章讲的是变量和类型,现做笔记如下: 数据存储区域分只读数据区(存储常量和恒值,正常情况下不做修改).全局/静态存 ...
- python好学吗 老程序员-使用 Python 会降低程序员的编程能力吗?
某些情况下会降低编程能力,某些情况下会提升编程能力,要看你怎么理解"编程能力". 1.使用 Python 会降低程序员的编程能力,这个假设成立的情形 如果强行要说使用Python可 ...
- 好程序员大数据笔记之:Hadoop集群搭建
好程序员大数据笔记之:Hadoop集群搭建在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天 ...
- 如何向新手程序员介绍编程?
如何向新手程序员介绍编程? 学习Java,他们都说很easy. 作为一名刚从斯康星大学麦迪逊分校计算机科学系毕业的大学生,我通过一些编程课程认识了很多使用Java的朋友.现在很多学校都在从别的编 ...
- c语言为什么有这么多的编程环境?_为什么98%的程序员学编程都会从C语言开始?...
在互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢? 就让我来跟大家分享分享: 壹 第一:相比较其他的编 ...
- C/C++程序员的编程修养
关注.星标公众号,不错过精彩内容 作者:陈浩 转自:嵌入式云IOT技术圈 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是.对于一些技术细节来说和底层的技术, ...
最新文章
- configure - 配置源代码树
- SpringAOP概念
- 经典DL论文研读(part3)--Improving neural networks by preventing co-adaptation of feature detectors
- 教你如何把自己从好友的QQ中删除
- Android加载自定义字体出错,盘点Android使用自定义字体遇到的坑
- js+canvas绘制360加速球
- 数字孪生可视化开发技术(ThingJS)学习笔记
- 第二章,用矩阵解线性方程组,01-高斯消元法
- 360插件化Replugin爬坑之路
- 发票查验API可以查验的发票类型有哪些?
- LaTeX入门|(1)从Word到LaTeX:LateX排版常用指令
- 主板各种插针接口与机箱(电源)的接法
- 基于JAVA个人交友网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署mp4
- UPRtek光谱仪维修LED光谱计维修MK350N
- java8新特性(2)-Lambda表达式
- oracle根据约束名查找具体信息,如是哪张表的哪个字段约束信息
- Linux下定时删除指定目下n天前的文件
- Simulink仿真入门到精通(五) Simulink模型的仿真
- web开发与应用(一)
- 基础面试题:java内存区域
热门文章
- 周杰伦新歌《说好不哭》上线,程序员哭了......
- python property类
- stm32中c语言换行符error——expect a declaration warning——“\“followed by white space is not a line splic
- Linux入门级教学-常见工具介绍及其使用
- RBL 列表查询网址
- 亚马逊免费服务器超时收费问题
- 饥荒机器人升级上限多少_饥荒里机器人属性最高升级到多少
- java filedescriptor_Java FileDescriptor sync()方法
- 有关创新的一些思考(原创)
- java 单例模式 泛型_单例模式 泛型