继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

模拟@Test的功能实现代码

萌萌小温柔
关注TA
已关注
手记 306
粉丝 56
获赞 401

1.1.1 需求:
定义一个类,在类中编写一些测试方法:测试方法的格式:public void xxx() 在测试方法上添加@MyTest 然后可以使这个类中添加了有@MyTest注解的方法执行.
1.1.2 分析:1.1.2.1 技术分析:
【注解的概述】

Ø 注解和注释区别:* 注释:给程序员看的.* 注解:给虚拟机看的.(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能.)

【JDK中提供的注解】

Ø @Override        :描述子类重写父类的方法:* JDK1.5版本的时候 该注解只能应用在 类的继承上.* JDK1.6版本的时候 该注解可以应用在 类的实现上.Ø @SuppressWarnings        :压制警告.Ø @Deprecated        :描述方法过时.

【自定义注解】

Ø 自定义注解:* 定义类        :class* 定义接口        :interface* 定义枚举        :enum* 定义注解        :@interfaceØ 代码实现:/** * 定义一个注解:名称是Anno1 */@interface Anno1{}Ø 定义注解的属性: Invalid type Date for the annotation attribute Anno2.d; only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof* 注解的属性的类型:    * 基本数据类型:    * String类型:    * Class类型:  * 注解类型:    * 枚举类型:    * 以上类型的一维数组:
  • 代码实现:

/** * 定义一个带有属性的注解:Anno2 */@interface Anno2{int a();boolean b() default false;String s();// Date d();Class c();Anno1 anno1();Color color();String[] arrs();}

***** 特殊的属性名称:value

 * 如果使用注解的时候,只出现了value属性,value属性可以省略的.

1.1.3 代码实现:

【步骤一】:自定义注解:MyTest【步骤二】:定义核心运行类.【步骤三】:在核心运行类中.    * 获得测试类的Class    * 获得Class中的所有方法.    * 遍历得到每个方法.    * 判断方法上有MyTest注解,就执行该方法.         * 自定义注解默认存在于源码阶段,需要让注解存在的时间更长.使用元注解:(只用于修饰其他的注解)代码:public class CoreRunner {public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {/** * 获得测试类的Class. * 获得Class中的所有的方法. * 遍历每个方法,查看每个方法上是否有MyTest注解. * 有MyTest注解,这个方法就执行. */// 1.获得测试类的Class:Class clazz = AnnotationDemo1.class;// 2.获得Class中的所有的方法: 规定了测试的方法必须是public.Method[] methods = clazz.getMethods();// 3.遍历每个方法:for(Method method:methods){boolean flag = method.isAnnotationPresent(MyTest.class);// System.out.println(method.getName()+ "     " + flag);if(flag){// 说明方法上有MyTest注解:method.invoke(clazz.newInstance(), null);}}}}

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP