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);}}}}