理解反射:
1.创建属性或者方法对象
2.然后再将属性或者方法赋予某一个类的对象
区别:
在python自动化脚本设计中,往往通过反射getattr(obj,name_str)(**kwargs)去调用工具类中的get/post方法,obj为工具类实例化对象,name_str为所需要动态调用的方法
因为python已经封装好了,所以直接调用比较简单,就不介绍了,测试人员的基础技能。
java中:Class.forName("类的全路径名")。
用法:
1.如何获取构造方法对象
public Constructor<T> getConstructor(Class<?>... parameterTypes):获取公共的构造方法
public Constructor<?>[] getConstructors():获取所有的公共的构造方法
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):获取构造方法
public Constructor<?>[] getDeclaredConstructors():获取所有的构造方法
Constructor类中的方法?
public T newInstance(Object... initargs):创建对象
public void setAccessible(boolean flag):
反射的对象在使用时应该取消 Java 语言访问检查
一般我们传递的参数都是true
暴力反射:使用反射获取私有成员的时候,使用普通的对象是获取不到的,必须使用
带declared的方法,而且需要设置setAccessible,值true可以获取到
2.如何获取字段(成员变量,属性)对象
public Field getField(String name):获取公共的成员变量
public Field[] getFields():获取所有的公共的成员变量
public Field getDeclaredField(String name):获取成员变量
public Field[] getDeclaredFields():获取所有的成员变量
Field类中的方法?
public void set(Object obj,Object value):给具体的哪个对象赋什么值
public void setAccessible(boolean flag):
反射的对象在使用时应该取消 Java 语言访问检查
一般我们传递的参数都是true
3.如何获取普通的成员方法对象
public Method getMethod(String name,Class<?>... parameterTypes):获取公共的方法对象
public Method[] getMethods():获取所有的公共的方法对象
public Method getDeclaredMethod(String name,Class<?>... parameterTypes):获取方法对象
public Method[] getDeclaredMethods():获取所有的方法对象
Method类中的方法?
public Object invoke(Object obj,Object... args)
返回值:就是调用方法之后的返回值