添加一个Student.java:

packagecom.zhengbin.annotationtest.anno;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/*** Created by zhengbin06 on 2016/10/15.*/@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)public @interfaceStudent {

String id()default "201370034217";

String name()default "郑斌";int age() default 21;

}

修改NeedTest.java:

@Retention(RetentionPolicy.RUNTIME) //①声明注解的保留期限

@Target(ElementType.METHOD) //②声明可以使用该注解的目标类型(这里表明该注解的目标类型是方法,查看@Target的实现,可以看到它的成员为ElementType类型的数组)

public @interface NeedTest { //③定义注解

boolean internal() default true; //④声明注解成员//注解成员的类型、成员名、与默认值

Student student();

}

在①和②处,我们所看到的注解是Java预定义的注解,成为元注解(Meta-Annotation),它们被Java编译器使用,会对注解类的行为产生印象。@Retention(RetentionPolicy.RUNTIME)表示NeedTest这个注解可以在运行期被JVM读取,注解的保留期限类型在java.lang.annotation.Retention类中定义,介绍如下:

@Retention,RetentionPolicy

Target(ElementType.METHOD)表示NeedTest这个注解只能应用到目标类的方法上,注解的应用目标在java.lang.annotation.ElementType类中定义:

@Target,ElementType

所有的注解类都隐式继承于java.lang.annotation.Annotation,但注解不允许显式继承于其他的接口。

使用注解

下面我们在ManageService.java中使用注解:

packagecom.zhengbin.annotationtest.service;importcom.zhengbin.annotationtest.anno.NeedTest;importcom.zhengbin.annotationtest.anno.Student;/*** Created by zhengbin06 on 2016/10/15.*/

public classManageService {

@NeedTest(student=@Student)// ①public voidaccessStudent() {

System.out.println("中工来了个小学弟!");

}

@NeedTest(internal= false, student = @Student(name = "郑斌" , age = 21))// ②public voidgraduateStudent() {

System.out.println("曾经的小学弟要毕业了。。。");

}

}

在①处,因为@NeedTest注解类的internal成员有默认值,所以在这里可以不用再进行赋值,但是student成员是一个注解类,所以必须申明出来,但同时也不必赋值,这样使用的就是声明的默认值

在②处,这是完整的声明和赋值

访问注解

前面提到过,注解不会直接影响程序的运行,但是第三方程序或工具可以利用代码中的注解完成特殊的任务,间接控制程序的运行。对于RetentionPolicy.RUNTIME保留期限的注解,我们可以通过反射机制访问类中的注解。

在JDK 5.0里,Package、Class、Constructor、Method以及Field等反射对象都新增了访问注解信息的方法:

T getAnnotation(Class annotationClass)

下面,我们就通过反射来访问注解,得出ManageService类中通过@NeedTest注解所承载的测试需求,如下:

packagecom.zhengbin.annotationtest.test;importcom.zhengbin.annotationtest.anno.NeedTest;importcom.zhengbin.annotationtest.service.ManageService;importjava.lang.reflect.Method;/*** Created by zhengbin06 on 2016/10/15.*/

public classTestTool {public static voidmain(String[] args) {

Class clazz= ManageService.class;

Method[] methods=clazz.getMethods();

System.out.println(methods.length);for(Method method : methods) {

NeedTest needTest= method.getAnnotation(NeedTest.class);if (needTest != null) {if (needTest.internal()) { //①

System.out.println("小学弟:"+needTest.student().name()); //②

}else{

System.out.println("毕业僧:"+needTest.student().name());

}

}

}

}

}

在①处,判断成员internal的值

在②处,获得成员student在ManageService中的注解信息

运行以上的代码,输出以下的信息:

11小学弟:郑斌

毕业僧:郑斌

方法个数为11,除了我们申明的两个,其它都是父类Object的方法。

java jdk注解 使用_JDK 5.0 注解的使用,自定义注解相关推荐

  1. java jdk 下载镜像_JDK下载哪家快?推荐3个国内java jdk镜像站

    我们在日常进行Java开发中,可能都会遇到下载JDK,但是Oracle官方的下载条件非常苛刻,需要手动同意license.历史版本需要手动登录,所以有时候不得不先进行注册,然后才能下载.更麻烦的是下载 ...

  2. java jdk的作用_jdk的作用是什么?jdk和jre区别介绍

    之前给大家介绍了jdk是什么意思,那么接下来要给大家讲到的就是jdk的作用以及jdk和jre之间的区别,一起来了解一下吧! 一.jdk的作用是什么? jdk是java的开发编译环bai境. 它里面包含 ...

  3. java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法

    大家都知道JDK是JAVA运行的环境,JDK是将.java文件翻译成.class文件的虚拟机,只有经过编译后系统才能识别,不管是eclippse,还是Myeclipse,还是其他的JAVA编程的编译器 ...

  4. java jdk 类加载机制_JDK源码阅读之类加载

    java类加载 类的生命周期(类加载过程) LLIUU+VPR 加载(Loading) 链接(Linking) 验证(Verification) 准备(Preparation) 解析(Resoluti ...

  5. java jdk 环境不一致_jdk(多版本)安装注意!

    4.第二步,开始安装Jdk的运行环境,我将它安装在..../java_jdk1.8/jre8下: 5.安装完JDK后配置环境变量  计算机→属性→高级系统设置→高级→环境变量 系统变量→新建 JAVA ...

  6. 注解和反射详细笔记。自定义注解,元注解,内置注解。反射机制,Java Reflection,Java内存分析,反射操作注解,java.lang.reflect.Method,Class

    文章目录 注解 什么是注解 内置注解 元注解 自定义注解 反射机制 静态语言 vs 静态语言 Java Reflection 反射相关的主要API Class类 Java内存分析 创建运行时类的对象 ...

  7. Java学习之路(十):枚举类和注解

    一.枚举类的使用 当类的对象只有有限个,确定的(此类称为枚举类),如 星期:周一,- , 周日 性别:男(man),女(woman) 支付方式:Cash(现金),WeChatPay(微信支付),Ali ...

  8. java自定义注解详解

    一: 注解的概念 1.1 注解的官方定义 首先看看官方对注解的描述: An annotation is a form of metadata, that can be added to Java so ...

  9. 【Java 注解】自定义注解 ( 元注解 )

    文章目录 一.元注解 二.常用的元注解类型 三.@Target 元注解 四.@Retention 元注解 五.@Documented 元注解 六.@Documented 元注解 一.元注解 元注解 是 ...

最新文章

  1. JavaScript夯实基础系列(四):原型
  2. linux lib64被改名,问题解决:Centos误将/lib64更改为lib64.bak
  3. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
  4. Ubuntu安装apache+Yii2
  5. 几种常见的Web攻击
  6. element ui 点击修改开启停用按钮状态
  7. HyperLedger Composer 查看所有容器 | 进入指定容器
  8. ubuntu刷新DNS
  9. CS61a-2020fall学习笔记
  10. python下载电影链接_Python:输入电影名,爬获取到阳光电影网中对应名称的迅雷下载链接,获取的链接有点问题(具体问题在内容里)...
  11. Python列表的正序,逆序输出
  12. 【华为机试真题 Python实现】统计射击比赛成绩
  13. 案例分享 | 昭通装配式绿色建筑产业园EPC工程总承包项目管理实践
  14. 浅谈前端的数据驱动和事件驱动
  15. 如何在Hi3559A上运行自己的YOLOv3模型
  16. 关系型数据库是什么?
  17. 关于华硕飞行堡垒8开机黑屏,但键盘,电源指示灯亮
  18. 吴会计的烦恼,网络推广没效果
  19. 软件测试无效bug分析,(一)Bug不能重现的原因分析及其对策
  20. 新的浏览器的诞生,你会选择哪个?

热门文章

  1. 求一个集合的所有子集问题
  2. vc 运行不了pdb文件什么鬼_PDB文件:每个开发人员都必须知道的(转)
  3. 一亩田php,【笔尖】一亩田(诗歌)
  4. 电视节目播放实现播放 Android开发
  5. 【基础知识】rubymine常用快捷键
  6. 原生html写h5项目时,有时会遇到img标签图片点击会放大的问题
  7. MYSQL:餐厅点菜、管理员工的数据库。大学数据库课程大作业(初学者,入门,用的基础知识)
  8. 粒子滤波的推导到应用
  9. 运动控制 —— 强大的状态机工具
  10. AOP、Filter、拦截器,花落知多少