文章目录
- Junit单元框架
- 具体步骤
- 常用方法
- 反射
- 获取类
- 获取类的构造器
- 获取类的成员变量
- 获取类的成员方法
- 应用场景
- 注解
- 自定义注解
- 元注解
- 注解的解析
- 应用
Junit单元框架
具体步骤
- 将Junit框架的jar包导入到项目中(注意:IDEA集成了Junit框架,不需要我们自己手工导入了)
- 编写测试类、测试类方法(注意:测试方法必须是公共的,无参数,无返回值的非静态方法)
- 必须在测试方法上使用@Test注解(标注该方法是一个测试方法)
- 在测试方法中,编写程序调用被测试的方法即可。
- 选中测试方法,右键选择“JUnit运行” ,如果测试通过则是绿色;如果测试失败,则是红色
常用方法
反射
获取类
- 方式一:Class c1 = Class.forName(“全类名”);
- 方式二:Class c2 = 类名.class
- 方式三:Class c3 = 对象.getClass();
获取类的构造器
利用反射技术获取构造器对象的方式
getDeclaredConstructors()
getDeclaredConstructor (Class<?>… parameterTypes)
反射得到的构造器可以做什么?
依然是创建对象的
public newInstance(Object… initargs)
如果是非public的构造器,需要打开权限(暴力反射),然后再创建对象
setAccessible(boolean)
反射可以破坏封装性,私有的也可以执行了。
获取类的成员变量
获取类中成员变量对象的方法
getDeclaredFields()
getDeclaredField (String name)
反射得到成员变量可以做什么?
依然是在某个对象中取值和赋值。
void set(Object obj, Object value):
Object get(Object obj)
如果某成员变量是非public的,需要打开权限(暴力反射),然后再取值、赋值
setAccessible(boolean)
获取类的成员方法
利用反射技术获取成员方法对象的方式
getDeclaredMethods()
getDeclaredMethod (String name, Class<?>… parameterTypes)
反射得到成员方法可以做什么?
依然是在某个对象中触发该方法执行。
Object invoke(Object obj, Object… args)
如果某成员方法是非public的,需要打开权限(暴力反射),然后再触发执行
setAccessible(boolean)
应用场景
绕过泛型
- 编译成Class文件进入运行阶段的时候,泛型会自动擦除。
- 反射是作用在运行时的技术,此时已经不存在泛型了。
搭建框架
需求
给你任意一个对象,在不清楚对象字段的情况可以,可以把对象的字段名称和对应值存储到文件中去。
分析 - 定义一个方法,可以接收任意类的对象。
- 每次收到一个对象后,需要解析这个对象的全部成员变量名称。
- 这个对象可能是任意的,那么怎么样才可以知道这个对象的全部成员变量名称呢?
- 使用反射获取对象的Class类对象,然后获取全部成员变量信息。
- 遍历成员变量信息,然后提取本成员变量在对象中的具体值
- 存入成员变量名称和值到文件中去即可。
注解
自定义注解
Annotation: 注解的顶级接口,注解都是Annotation类型的对象
元注解
注解注解的注解
@Target约束自定义注解可以标记的范围。
@Retention用来约束自定义注解的存活范围。
注解的解析
解析技巧:
注解在哪个成分上,我们就先拿哪个成分对象。
- 比如注解作用成员方法,则要获得该成员方法对应的Method对象,再来拿上面的注解
- 比如注解作用在类上,则要该类的Class对象,再来拿上面的注解
- 比如注解作用在成员变量上,则要获得该成员变量对应的Field对象,再来拿上面的注解
应用
模拟Junit框架