自定义一个注解,该注解名字为“MyExecute”,在运行时有效,作用范围在方法上;其中有两个成员变量:value与ignore。代码如下:

/**

* 指定该注解的生命周期

* 1、仅编译期:RetentionPolicy.SOURCE;

* 2、仅class文件:RetentionPolicy.CLASS;

* 3、运行期:RetentionPolicy.RUNTIME。

* 只有在运行期才可以通过反射获取到

*/

@Retention(RetentionPolicy.RUNTIME)

/**

* 指定该注解能够用于哪些程序元素

* 1、类或接口:ElementType.TYPE;

* 2、字段:ElementType.FIELD;

* 3、方法:ElementType.METHOD;

* 4、构造方法:ElementType.CONSTRUCTOR;

* 5、方法参数:ElementType.PARAMETER。

*/

@Target({ElementType.METHOD})

//创建注解使用 @interface 关键字来声明

public @interface MyExecute {

/**

* 1、成员变量无参数方法的形式来声明:方法名是该成员的名字、返回值是该成员的类型

* 2、可以指定初始值,初始值用 default 关键字

* 3、如果只要一个参数成员,建议使用参数名为value()

* @return

*/

String value() default "MyAnnotation";

/**

* 定义成员变量ignore() 类型为boolean 只有方法上该成员变量值为true时,该注解才起作用,

* 需要反射来配合该注解。

*/

boolean ignore() default false;

}

自定义一个类,类中有两个方法,在这两个方法上使用该注解:

public class AnnotationTest {

@MyExecute(value = "自定义的注解MyExecute,并且ignore为true!", ignore = true)

public void ignoreTrue(){

System.out.println("ignore为真,不调用,用来测试自定义注解!");

}

//不指定ignore的值,默认为false,会执行。

@MyExecute(value = "自定义的注解MyExecute,并且ignore为默认值false!")

public void ignoreFalse(){

System.out.println("ignore为假,不忽视,调用方法,用来测试自定义注解!");

}

}

测试自定义注解,自定义注解要有实际意义,需要配上注解的信息处理流程,也就是使用反射获取到注解并进行处理。

public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {

//使用反射来使自定义注解有实际意义

AnnotationTest annotationTest = new AnnotationTest();

//1、获取当前类的Class实例 使用运行时类的.class属性来获取

//也可以使用annotationTest.getClass()方法来获取

Class clazz = AnnotationTest.class;

//2、获取所有的方法,并拿到方法上的注解

Method[] methods1 =clazz.getDeclaredMethods();

for (Method method : methods1) {

//判断这个方法是否存在自定义的注解

if(method.isAnnotationPresent(MyExecute.class)){

//拿到该注解下的成员ignore,并判断是否为false

MyExecute myExecute = method.getAnnotation(MyExecute.class);

System.out.println("***************************************");

System.out.println("该方法名为:"+method.getName()+",它上面注解的value成员值为:"+myExecute.value());

if(!myExecute.ignore()){

System.out.println("当ignore为false时执行该方法!!!");

method.invoke(annotationTest,null);

}

}

}

}

运行结果

注意

注解的成员如果没有默认值时,使用注解时,需要指定该成员的值,除非该成员有默认值;指定格式为:“参数名 = 参数值”;当只有一个成员且名称为value(),指定参数值时可以取消“value = ”;

自定义注解要想使其有意义,需要与注解的信息处理流程(反射)相配合。

java的前生今世_java注解的前生今世相关推荐

  1. java interface作用是什么_Java注解总结:史上最全,有这一篇就够了

    什么是注解? 注解的定义 官网描述如下: Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.Java 注解是从 Jav ...

  2. java 比较字符串前几位_java截取字符串前几位

    java截取字符串_IT/计算机_专业资料.java截取字符串 1根据字符串 S... java中常用的字符串的截取方法_计算机软件及应用_IT/计算机_专业资料.jsp中常见使用技术,js,jstl ...

  3. java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点:元数据 注解的分类 内置注解 自定义注解 注解处理器 Serv ...

  4. java注释提醒_Java注解

    注解,不仅仅是给人看的,还给程序看,还能被程序读取 一.什么是注解 1.Annotation是从JDK5.0开始引入的新技术 2.Annotation的作用 (1).不是程序本身,可以对程序做出解释( ...

  5. java threadsafe 注解_Java 注解详解

    什么是注解 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解.而新手很难理解的主要原因是一些技术文档里的专业术语和名词不太 ...

  6. java annotation详解_Java注解Annotation详解

    从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...

  7. java注解机制_Java 注解机制

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

  8. java注解编程_java 注解 基本原理 编程实现

    java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用,因此来说, 反射的定义应该包含注解才合理一些.当然,这只是个人想法,至于j ...

  9. java method 注释_Java注解

    Java注解 注解概述 3.注解 3.1.注解,或者叫做注释类型,英文单词是:Annotation 疑问:注解到底是干啥的????????? 3.2.注解Annotation是一种引用数据类型.编译之 ...

  10. java 注解与反射_Java注解与反射直接上手

    什么是注解(Annotation) 注解顾名思义为注释.讲解,可以理解为一种标签或标记,可以用在类.方法或者域上.向类.方法等添加注解,相当于给他们贴上了一层标签. 注解使用 在使用注解时,在类名.方 ...

最新文章

  1. Go 分布式学习利器(6)-- Map
  2. 国内知名 IT 公司前端团队
  3. [BZOJ 2427] 软件安装
  4. PAT甲级1130 Infix Expression:[C++题解]中缀表达式、二叉树中序遍历、dfs
  5. 电脑版剪映v0.6.9内测版
  6. 五大领域总目标指南_每日干货 | 五大领域 学前社会教育1
  7. 组内分享slide 【about 3D】
  8. 一些关于angular的总结
  9. 服务器tomcat/mysql的一些有关命令
  10. Android应用开发提高篇(6)-----FaceDetector(人脸检测)
  11. ubuntu 18.04 更新显卡驱动
  12. 「干货」Linux 应急响应日志分析命令「详细总结」
  13. 码龄10年工作6年的搬砖小哥,最常访问的学习网站都在这里了
  14. Python 替换同义词(jieba 实现)
  15. lvm扩容-缩减磁盘
  16. 年龄和收入对数的线性回归_中国社会的代际收入流动性趋势:2000~2009(一)
  17. 12333提交显示服务器异常,掌上12333显示没有收到异地协助认证书什么原因_具体解决办法流程_3DM手游...
  18. WebGIS学习路线
  19. 微信小程序getPhoneNumber方法获取用户手机号
  20. 表示温度的摄氏度符号怎么打?

热门文章

  1. 网站博客更换主机空间搬家:Discuz! X2.5老鹰主机搬家全过程
  2. UVA-1579 Matryoshka
  3. selenium:周杰伦歌词
  4. 决策易受邀参加思齐2019绩效年会,与众大咖携手推动药企SFE觉醒
  5. 个人微信开发API,微信机器人开发
  6. UOS设置自定义壁纸方法
  7. ubuntu中selenium+chrome截图时中文显示成方框问题的解决方法
  8. 15. 三数之和(筛选数据)
  9. 浅析红楼梦主题曲《枉凝眉》演唱技巧——论文文档
  10. OSChina 周六乱弹 —— 横穿机房走廊,暴走数据中心