Class類型對象培廓,就是把java代碼的字符串晶默,解析成Class對象存起來涛救,可以單項(xiàng)取和操作。類似把student信息串解析成Student對象
對比項(xiàng) | webdriver | 反射 |
---|---|---|
對象 | driver | class |
獲取方式 | new ChromeDriver() | 類名.class |
實(shí)例變量名.getClass() | ||
類加載器:Class.forName("包名.類名") | ||
處理元素 | 標(biāo)簽 | 包边败、類名、構(gòu)造器捎废、字段笑窜、方法、注解登疗、繼承的父類排截、實(shí)現(xiàn)的接口 |
封裝類 | WebElement | 包:Package |
構(gòu)造器: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();
// 創(chuàng)新點(diǎn):允許啟動(dòng)程序的時(shí)候,可以沒有類智政,運(yùn)行過程中手動(dòng)加載到內(nèi)存
Class c = Class.forName("com.guoyasoft.implement.StudentWL");
// 2认罩、獲取包名,反射里面女仰,每一種java元素猜年,都會(huì)封裝成一個(gè)類
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、獲取構(gòu)造器床三、實(shí)例化
Constructor constructor = c.getConstructor();
Student wl = (Student) constructor.newInstance();
// 5一罩、獲取字段、設(shè)置撇簿、取值
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("反射設(shè)置:"+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, "反射調(diào)用method");
Method learn=c.getMethod("learn", String.class);
learn.invoke(wl, "法語");
}
}