Class类型对象,就是把java代码的字符串,解析成Class对象存起来,可以单项取和操作。类似把student信息串解析成Student对象
对比项 | webdriver | 反射 |
---|---|---|
对象 | driver | class |
获取方式 | new ChromeDriver() | 类名.class |
实例变量名.getClass() | ||
类加载器:Class.forName("包名.类名") | ||
处理元素 | 标签 | 包、类名、构造器、字段、方法、注解、继承的父类、实现的接口 |
封装类 | WebElement | 包:Package |
构造器:Constructor | ||
字段:Field | ||
方法:Method | ||
注解:Annotation | ||
类、父类、接口:Class |
package com.guoyasoft;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.guoyasoft.implement.Student;
public class ReflectMethon {
public static void main(String[] args) throws Exception {
// // 1、获取class对象
// Class c1 = StudentWL.class;
//
// StudentWL s = new StudentWL();
// Class c2 = s.getClass();
// 创新点:允许启动程序的时候,可以没有类,运行过程中手动加载到内存
Class c = Class.forName("com.guoyasoft.implement.StudentWL");
// 2、获取包名,反射里面,每一种java元素,都会封装成一个类
Package p = c.getPackage();
String packageName = p.getName();
System.out.println("package name =" + packageName);
// 3、获取类名、父类和接口
Class superClass = c;
while (superClass != null) {
System.out.println("super class =" + superClass.getName());
superClass = superClass.getSuperclass();
}
Class[] interfaces = c.getInterfaces();
for (Class c1 : interfaces) {
System.out.println("接口名称:" + c1.getName());
}
// 4、获取构造器、实例化
Constructor constructor = c.getConstructor();
Student wl = (Student) constructor.newInstance();
// 5、获取字段、设置、取值
Field[] fields = c.getFields();
for (Field f : fields) {
System.out.println("字段名:" + f.getType().getName() + " "
+ f.getName());
}
Field name=c.getField("name");
name.set(wl, "吴令");
Field age=c.getField("age");
age.set(wl, 23);
System.out.println("反射设置:"+wl.toString());
// 6、获取方法
Method[] methods = c.getDeclaredMethods();
for (Method m : methods) {
System.out.println("方法名:" + m.getReturnType().toString() + " "
+ m.getName() + "(" + m.getParameterTypes() + ")");
}
Method doHomeWork=c.getMethod("doHomeWork", String.class);
doHomeWork.invoke(wl, "反射调用method");
Method learn=c.getMethod("learn", String.class);
learn.invoke(wl, "法语");
}
}