本帖最后由 我是楠楠 于 2018-7-4 17:27 编辑
【郑州校区】模拟@Test的功能实现代码
1.1.1 需求:定义一个类,在类中编写一些测试方法:测试方法的格式:public void xxx() 在测试方法上添加@MyTest 然后可以使这个类中添加了有@MyTest注解的方法执行. 1.1.2 分析:1.1.2.1 技术分析:【注解的概述】 [AppleScript] 纯文本查看 复制代码 Ø 注解和注释区别:
* 注释:给程序员看的.
* 注解:给虚拟机看的.(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能.) 【JDK中提供的注解】 [AppleScript] 纯文本查看 复制代码 Ø @Override :描述子类重写父类的方法:
* JDK1.5版本的时候 该注解只能应用在 类的继承上.
* JDK1.6版本的时候 该注解可以应用在 类的实现上.
Ø @SuppressWarnings :压制警告.
Ø @Deprecated :描述方法过时. 【自定义注解】 [AppleScript] 纯文本查看 复制代码 Ø 自定义注解:
* 定义类 :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类型:
* 注解类型:
* 枚举类型:
* 以上类型的一维数组: * 代码实现: [AppleScript] 纯文本查看 复制代码 /**
* 定义一个带有属性的注解: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 代码实现:[AppleScript] 纯文本查看 复制代码 【步骤一】:自定义注解: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);
}
}
}
} 传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话 0371-56061160/61/62 来校路线 地铁一号线梧桐街站A口出 |